2016-05-04 13 views
-2

Ich habe zwei Listen von Strings und möchte herausfinden, welche Strings in beiden Listen sind.R: Finde identische Strings in zwei Listen

Ich habe versucht, die Listen in Vektoren zu konvertieren, so dass ich intersect oder setequal verwenden konnte, aber das konvertierte alle Zeichenfolgen zu Zahlen und (Entschuldigung, wenn es eine offensichtliche Antwort ist, die ich nicht herausfinden kann), kann ich nicht zu konvertieren scheinen die Listen ohne das passiert.

Was ist der beste Weg nach vorne?

EDIT: Ich habe diesen Datenrahmen:

dput(s) 
structure(list(V1 = structure(c(3L, 2L, 1L, 4L), .Label = c("24d2afb212410711de0e237e5435e104", 
"2a3d9ca791a579a14883de538a012e24", "a90b03209a8095ec406809d89d5035c3", 
"f271eb38cc409c6bfe9dcf2bfcab8471"), class = "factor")), .Names = "V1", row.names = c(NA, 
-4L), class = "data.frame") 

dput(r) 
structure(list(V1 = structure(c(2L, 1L, 4L, 3L), .Label = c("24d2afb212410711de0e237e5435e104", 
"2a3d9ca791a579a14883de538a012e24", "7320e2e921df862968954d4b60e2a80a", 
"a9f47ec7c488d2bcddf2c1adc2bf6305"), class = "factor")), .Names = "V1", row.names = c(NA, 
-4L), class = "data.frame") 

Ich mag die Saiten finden, die in beiden sind, das heißt

2a3d9ca791a579a14883de538a012e24 und 24d2afb212410711de0e237e5435e104.

as.character() funktioniert nicht zum Beibehalten dieser Zeichenfolgen; Gibt es noch etwas anderes, das sie in Faktoren umwandeln könnte oder gibt es eine andere Operation, die besser funktionieren würde?

+2

Sind diese 'lists' gleich lang? Prüfe die 'str' der' liste' für die 'Klasse' der Elemente von' liste'? Bitte geben Sie ein kleines reproduzierbares Beispiel und die erwartete Ausgabe an. – akrun

+2

Klingt wie sie Faktoren sind. Probieren Sie 'as.character()' mit ihnen und versuchen Sie es erneut mit Ihrem Code. – cory

+0

Weitere Informationen hinzugefügt. Ich habe as.character() ausprobiert und die meisten Zeichen vollständig entfernt. – Michael

Antwort

0

Sie müssen auch die Spalten in Ihren Datenrahmen angeben.

Mit intersect,

intersect(r$V1, s$V1) 
#[1] "2a3d9ca791a579a14883de538a012e24" "24d2afb212410711de0e237e5435e104" 

Mit grep,

unlist(sapply(r$V1, function(i)grep(i, s$V1, value = TRUE))) 
#[1] "2a3d9ca791a579a14883de538a012e24" "24d2afb212410711de0e237e5435e104" 
+0

Danke, Sotos, aber wenn ich versuche, Schnittpunkt zu verwenden, erhalte ich einen leeren Datenrahmen. Wenn ich grep verwende, ist dies die Nachricht, die ich bekomme (und es gibt keine Ergebnisse): 'Warnmeldung: In Grep (i, s, Wert = TRUE): Argument 'Muster' hat Länge> 1 und nur die Das erste Element wird verwendet. – Michael

+0

hmm, kannst du 'str()' deiner Listen teilen? 'sapply' hätte sich um diese Warnung kümmern sollen – Sotos

+0

str (s): ' 'data.frame': \t 40909 obs. von 1 Variabel: $ V1: Faktor w/33212 level "0000734ec06af49a2477e8c044fe51fc", ..: 16139 15105 13860 2836 20143 29594 21391 15141 11485 32833 ... ' str (r): ' 'data.frame': \t 1091319 obs. von 1 Variable: $ V1: Faktor w/1090874 Ebenen "00002df85d03395bdeb018c35ef8ede8", ..: 1080008 717274 1041734 720889 167066 968941 328961 807515 89060 817033 ... ' – Michael

Verwandte Themen