#r #dataframe
Вопрос:
Итак, это мой образец фрейма данных
dput(aa)
structure(list(V4 = structure(1:22, .Label = c("Peak228404",
"Peak228411", "Peak228413", "Peak228423", "Peak228424", "Peak228439",
"Peak228461", "Peak228476", "Peak228479", "Peak228495", "Peak228528",
"Peak228553", "Peak228603", "Peak228612", "Peak228629", "Peak228630",
"Peak228642", "Peak228651", "Peak228691", "Peak228740", "Peak4983",
"Peak5261"), class = "factor"), annotation = structure(c(1L,
4L, 5L, 1L, 1L, 1L, 6L, 8L, 1L, 1L, 1L, 1L, 1L, 1L, 8L, 8L, 8L,
8L, 7L, 8L, 2L, 3L), .Label = c("Distal Intergenic", "Downstream (1-2kb)",
"Downstream (2-3kb)", "Exon (ENST00000370460.6/2334, exon 16 of 21)",
"Exon (ENST00000370460.6/2334, exon 21 of 21)", "Exon (ENST00000616857.4/84548, exon 3 of 3)",
"Exon (ENST00000620118.4/ENST00000620118.4, exon 3 of 4)", "Promoter"
), class = "factor"), Output_required = structure(c(1L, 5L, 5L,
1L, 1L, 1L, 5L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 6L, 6L, 6L, 6L, 4L,
6L, 2L, 3L), .Label = c("Distal Intergenic", "Downstream (1-2kb)",
"Downstream (2-3kb)", "Exon", "Exon ", "Promoter"), class = "factor")), class = "data.frame", row.names = c(NA,
-22L))
Этот
V4 annotation Output_required
1 Peak228404 Distal Intergenic Distal Intergenic
2 Peak228411 Exon (ENST00000370460.6/2334, exon 16 of 21) Exon
3 Peak228413 Exon (ENST00000370460.6/2334, exon 21 of 21) Exon
4 Peak228423 Distal Intergenic Distal Intergenic
5 Peak228424 Distal Intergenic Distal Intergenic
6 Peak228439 Distal Intergenic Distal Intergenic
7 Peak228461 Exon (ENST00000616857.4/84548, exon 3 of 3) Exon
8 Peak228476 Promoter Promoter
9 Peak228479 Distal Intergenic Distal Intergenic
10 Peak228495 Distal Intergenic Distal Intergenic
11 Peak228528 Distal Intergenic Distal Intergenic
12 Peak228553 Distal Intergenic Distal Intergenic
13 Peak228603 Distal Intergenic Distal Intergenic
14 Peak228612 Distal Intergenic Distal Intergenic
15 Peak228629 Promoter Promoter
16 Peak228630 Promoter Promoter
17 Peak228642 Promoter Promoter
18 Peak228651 Promoter Promoter
19 Peak228691 Exon (ENST00000620118.4/ENST00000620118.4, exon 3 of 4) Exon
20 Peak228740 Promoter Promoter
21 Peak4983 Downstream (1-2kb) Downstream (1-2kb)
22 Peak5261 Downstream (2-3kb) Downstream (2-3kb)
Таким образом, в этом фрейме данных в столбце, называемом аннотацией, есть строка, содержащая строку Exon, поэтому в каждой скобке есть текст, который мне не нужен, так как я хочу, чтобы он был согласованным, а это Exon
только. Я добавил еще один столбец Output_required
, который является моим желаемым конечным результатом.
Любое предложение или помощь будут очень признательны.
Ответ №1:
Удалите все 'Exon'
, что может быть написано после, с помощью регулярного выражения lookbehind.
sub('(?<=Exon).*', '', aa$annotation, perl = TRUE)
# [1] "Distal Intergenic" "Exon" "Exon" "Distal Intergenic"
# [5] "Distal Intergenic" "Distal Intergenic" "Exon" "Promoter"
# [9] "Distal Intergenic" "Distal Intergenic" "Distal Intergenic" "Distal Intergenic"
#[13] "Distal Intergenic" "Distal Intergenic" "Promoter" "Promoter"
#[17] "Promoter" "Promoter" "Exon" "Promoter"
#[21] "Downstream (1-2kb)" "Downstream (2-3kb)"
Точно stringr::str_remove
так же можно использовать и другие.
stringr::str_remove(aa$annotation, '(?<=Exon).*')
Комментарии:
1. большое вам спасибо, как всегда, за ответы несколькими способами
2. это сработало F1$аннотация <- как.данные.фрейм(sub(‘(?
3. Однако вы можете избежать использования
as.data.frame
.aa$annotation <- sub('(?<=Exon).*', '', aa$annotation, perl = TRUE)
должно сработать.4. позвольте мне запустить это работает
Ответ №2:
Еще один способ достичь своей цели-использовать обратную связь:
sub("(Exon)(.*)", "\1", aa$annotation)
Здесь мы разделяем строки на две группы захвата:
(Exon)
: эта группа буквально захватываетExon
(.*)
: эта группа захватывает все остальное\1
: эта обратная ссылка, используемая в аргументе замены tosub
, «запоминает» первую группу захвата, но не вторую, тем самым эффективно удаляя ее!
Ответ №3:
Мы можем использовать trimws
от base R
trimws(aa$annotation, whitespace = "(?<=Exon).*")
[1] "Distal Intergenic" "Exon" "Exon" "Distal Intergenic" "Distal Intergenic" "Distal Intergenic" "Exon"
[8] "Promoter" "Distal Intergenic" "Distal Intergenic" "Distal Intergenic" "Distal Intergenic" "Distal Intergenic" "Distal Intergenic"
[15] "Promoter" "Promoter" "Promoter" "Promoter" "Exon" "Promoter" "Downstream (1-2kb)"
[22] "Downstream (2-3kb)"