2016-03-09 53 views
0

我想創建一個新列,其中包含最後;後面的字符串ID列中的符號。我知道如何使用AWK做的,而不是在R.grep子串跟一個符號

> 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. 
+2

'sub(「。*;」,「」,Mapped2 $ ID)'? –

+0

請參閱'stringr'包 - 特別是'?stringr :: str_locate_all' –

回答

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

鑑於grep所使用regexs,這裏是爲我工作的正則表達式: /;([^\;]*)\n/g

請參閱this regex demo實施。

不幸的是,我不知道R,但希望可以讓你開始使用grep來達到目的。

2

如果你想捕捉的;最後一次出現,你可以使用一個greedy operator捕捉到它的一切(含)前,將其刪除,而只留下還剩下些什麼,例如

sub(".*;" , "", Mapped2$ID) 
# [1] "tRNA-Glu-CTC-2-1" "misc_RNA" "tRNA" "rRNA" "rRNA" "rRNA."