R findet Zeilen eines Datenrahmens, in denen bestimmte Spalten mit denen eines anderen [Duplikats] übereinstimmen

9

Ich habe eine R-Frage, dass ich mir sogar sicher bin, wie ich in einem Satz wörte, und konnte dafür noch keine Antwort finden.

Ich habe zwei Datenframes, die ich "schneiden" möchte und finde alle Zeilen, in denen Spaltenwerte in zwei Spalten übereinstimmen. Ich habe versucht, zwei intersect () und which () Anweisungen mit & amp; & amp; zu verbinden, aber keiner hat mir gegeben, was ich will.

Hier ist was ich meine. Nehmen wir an, ich habe zwei Datenrahmen:

%Vor%

Wie Sie sehen, gibt es einige Werte in der Spalte E-Mail, die sich überschneiden, und einige aus der Spalte Kampagne, die sich überschneiden. Ich möchte alle Zeilen von testData, in denen BOTH-Spalten übereinstimmen.

ie:

%Vor%

BEARBEITEN:

Mein Ziel beim Auffinden dieser Spalten besteht darin, eine Zeile in der ursprünglichen Spalte aktualisieren zu können. Also die endgültige Ausgabe, die ich möchte, ist:

%Vor%

Ich entschuldige mich, wenn dies ein Duplikat ist, und bedanke mich im Voraus für Ihre Hilfe!

EDIT2 ::

Ich habe am Ende nur eine For-Schleife benutzt, nichts Großartiges, aber ich fühle mich nicht effizient. Der Datensatz war klein genug, um es schnell zu tun. Wenn jemand eine schnelle R-Art hat, würde ich mich freuen, es zu sehen!

    
so13eit 26.07.2013, 18:45
quelle

2 Antworten

7

Wenn Sie data.tables verwenden und nach den Spalten suchen, die Sie abgleichen möchten, können Sie Ihr Ziel in einer Zeile erreichen:

%Vor%


Hier ist der vollständige Prozess:

%Vor%

Ergebnisse:

%Vor%     
Ricardo Saporta 26.07.2013, 19:51
quelle
7

Sie möchten die Funktion merge .

merge wird normalerweise verwendet, um zwei Tabellen mit einem ähnlichen common zusammenzuführen, aber das Argument by kann mehrere Spalten zulassen:

%Vor%

Alle Paare von Email und Campaign , die nicht übereinstimmen, werden standardmäßig verworfen. Das ist steuerbar durch die Argumente all.x und all.y , die standardmäßig auf FALSE gesetzt sind.

Das Standardargument für by ist intersect(names(x, y)) , daher müssen Sie in diesem Fall die Spalten technisch nicht angeben, aber es ist gut für die Übersichtlichkeit.

    
Señor O 26.07.2013 18:50
quelle

Tags und Links