2016-07-05 80 views
-1

在基因組學研究中,您經常會有許多帶有重複基因名稱的字符串。我想找到一種有效的方法,只保留一個字符串中的唯一基因名稱。這是一個有效的例子。但是,是不是可以一步完成這個工作,即不必拆分整個字符串,然後必須將這些獨特的元素一起過去?只保留字符串中的唯一元素r

genes <- c("GSTP1;GSTP1;APC") 
a <- unlist(strsplit(genes, ";")) 
paste(unique(a), collapse=";") 
[1] "GSTP1;APC" 
+0

這只是結合成一行:粘貼(唯一(unlist(strsplit(基因),「 「)),collapse =」;「))'。 – lmo

+0

我已經看到了這一堆棧:http://stackoverflow.com/questions/20283624/removing-duplicate-words-in-a-string-in-r –

+3

如果你會發現更好的東西,我會很驚訝。除了可以在'strsplit'中增加'fixed = TRUE'來提高效率,還有'stringi :: stri_unique',聲稱更適合NLP而不是'base :: unique'(但速度要慢得多)。 –

回答

0

基於這一例子表明,也許

gsub("(\\w+);\\1", "\\1", genes) 
#[1] "GSTP1;APC" 
+0

謝謝。它對這個例子有效,但是如果你有一個稍微不同的字符串,它將不起作用:c(「A」,「B」,「A」) – milan

0

另一種是做

unique(unlist(strsplit(genes, ";"))) 
#[1] "GSTP1" "APC" 

那麼這應該給你答案

paste(unique(unlist(strsplit(genes, ";"))), collapse = ";") 
#[1] "GSTP1;APC" 
+0

謝謝,但我需要保持獨特的基因名稱在同一個字符串中,由';'分隔。 – milan

+0

@milan看看更新後的版本,它給你你喜歡的確切輸出 – Learner

相關問題