我想创建一个新列,其中包含;
列中最后 ID
符号后面的字符串。我知道怎么做是使用awk,但不是在R.
> head(Mapped2)
IsomiR ID
1 TCCCGGGTGGTCTAGTGGTTAGGATTCGGCGCT URS0000635088;tRNA-Glu-CTC-2-1
2 TCCCGGGTGGTCTAGTGGTTAGGATTCGGCGCT URS000011CFE8;misc_RNA
3 TCCCGGGTGGTCTAGTGGTTAGGATTCGGCGCT URS00006A26A3;Homo;sapiens;tRNA
4 TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGA URS00008D20CE;Homo;sapiens;large;subunit;rRNA
5 TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGA URS00008C7E99;Homo;sapiens;large;subunit;rRNA
6 TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGA URS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA.
答案 0 :(得分:2)
如何匹配;
与字符串结尾之间的非;
字符的模式,如下所示:
s <- "6TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGAURS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA."
gsub(".*;([^;]+)$", "\\1", s)
# [1] "rRNA."
工作示例:
d <- structure(list(ID = structure(c(2L, 1L, 3L, 6L, 5L, 4L), .Label = c("URS000011CFE8;misc_RNA", "URS0000635088;tRNA-Glu-CTC-2-1", "URS00006A26A3;Homo;sapiens;tRNA", "URS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA.", "URS00008C7E99;Homo;sapiens;large;subunit;rRNA", "URS00008D20CE;Homo;sapiens;large;subunit;rRNA"), class = "factor")), .Names = "ID", class = "data.frame", row.names = c(NA, -6L))
d$newcol <- gsub(".*;([^;]+)$", "\\1", d$ID)
d
# ID newcol
# 1 URS0000635088;tRNA-Glu-CTC-2-1 tRNA-Glu-CTC-2-1
# 2 URS000011CFE8;misc_RNA misc_RNA
# 3 URS00006A26A3;Homo;sapiens;tRNA tRNA
# 4 URS00008D20CE;Homo;sapiens;large;subunit;rRNA rRNA
# 5 URS00008C7E99;Homo;sapiens;large;subunit;rRNA rRNA
# 6 URS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA. rRNA.
答案 1 :(得分:2)
如果要捕获最后一次出现的;
,您可以使用greedy operator捕获它之前的所有内容(包括)并删除它,同时只留下剩下的内容,例如
sub(".*;" , "", Mapped2$ID)
# [1] "tRNA-Glu-CTC-2-1" "misc_RNA" "tRNA" "rRNA" "rRNA" "rRNA."
答案 2 :(得分:1)