2016-07-05 10 views
-1

In der Genomforschung haben Sie oft viele Strings mit doppelten Gennamen. Ich möchte einen effizienten Weg finden, nur die eindeutigen Gennamen in einer Zeichenkette zu behalten. Dies ist ein Beispiel, das funktioniert. Aber ist es nicht möglich, dies in einem Schritt zu tun, d. H. Ohne die gesamte Saite aufteilen zu müssen und dann die einzigartigen Elemente wieder zusammen passieren zu müssen?behalten Sie nur eindeutige Elemente in Zeichenfolge in r

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

Das es nur vereint in eine Zeile: 'paste (unique (unlist (strsplit (gene,"; ")), collapse ="; "))'. – lmo

+0

Ich habe dieses auf Stapel gesehen: http://stackoverflow.com/questions/20283624/removing-duplicate-words-in-a-string-in-r –

+3

Ich werde wirklich überrascht sein, wenn Sie etwas besseres finden. Außer vielleicht ''' 'TRUE' 'TRUE' '' strsplit'' für Effizienzgewinn hinzuzufügen.Es gibt auch 'straii :: stri_unique', das behauptet, für NLP besser geeignet zu sein als' base :: unique' (aber auch viel langsamer). –

Antwort

0

Am Beispiel zeigte, vielleicht

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

Danke.Es funktioniert für dieses Beispiel, aber es wird nicht funktionieren, wenn Sie eine etwas andere Zeichenfolge haben: c ("A", "B", "A") – milan

0

Eine Alternative ist

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

Dann sollte diese geben Ihnen die Antwort

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

Danke, aber ich muss die einzigartigen Gen-Namen in der gleichen Zeichenfolge, getrennt durch ';'. – milan

+0

@ Mailand sehen aktualisierte Version, gibt es Ihnen die genaue Ausgabe, die Sie mögen – Learner