Ich habe die folgenden zwei Datenrahmen in R:Vergleichen und Zusammenführen von zwei Datenrahmen
df1 = data.frame(c("A", "A", "A", "B", "B"), c(1, 11, 21, 35, 45), c(6, 20, 30, 40, 60), c(1, 2, 3, 4, 5))
colnames(df1) = c("X", "Y", "Z", "score")
df1
X Y Z score
1 A 1 6 1
2 A 11 20 2
3 A 21 30 3
4 B 35 40 4
5 B 45 60 5
df2 = data.frame(c("A", "A", "A", "A", "B", "B", "B", "C"), c(1, 6, 21, 50, 20, 31, 50, 10), c(5, 20, 30, 60, 30, 40, 60, 20), c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"))
colnames(df2) = c("X", "Y", "Z", "out")
df2
X Y Z out
1 A 1 5 x1
2 A 6 20 x2
3 A 21 30 x3
4 A 50 60 x4
5 B 20 30 x5
6 B 31 40 x6
7 B 50 60 x7
8 C 10 20 x8
Für jede Zeile in df1, ich überprüfen möchten:
- es eine Übereinstimmung mit dem Wert im ' X 'und jeder andere' X 'Wert von df2
- wenn das obige wahr ist: Ich möchte prüfen, ob die Werte von' Y 'und' Z 'im Bereich der Werte' Y 'und' Z 'liegen df2
- wenn beide wahr sind: dann möchte ich th hinzufügen Der Wert von 'out' nach df1.
Dies ist, wie die Ausgabe aussehen sollte:
output = data.frame(c("A", "A", "A", "B", "B"), c(1, 11, 21, 35, 45), c(6, 20, 30, 40, 60), c(1, 2, 3, 4, 5), c("x1, x2", "x2", "x3", "x4", "x5"))
colnames(output) = c("X", "Y", "Z", "score", "out")
X Y Z score out
1 A 1 6 1 x1, x2
2 A 11 20 2 x2
3 A 21 30 3 x3
4 B 35 40 4 x6
5 B 45 60 5 x7
Die ursprüngliche df1 mit einer zusätzlichen Spalte ‚out‘ gehalten wird, die hinzugefügt wird.
Zeile 1 von 'Ausgabe', enthält 'x1, x2' in Spalte 'out'. Warum: Es gibt eine Übereinstimmung zwischen den Werten in Spalte 'X' und Bereich 1 bis 6 überlappen mit Zeilen 1 und 2 von DF2.
Ich habe diese Frage zuvor gestellt (Compare values from two dataframes and merge), wo vorgeschlagen wird, die foverlaps
Funktion zu verwenden. Wegen der unterschiedlichen Spalten zwischen df1 und df2 und den zusätzlichen Zeilen in df2 kann ich es nicht funktionieren lassen.
Wie kann ich die Variable ‚stringAsFactors = F“ für einen bereits bestehenden Datenrahmen gesetzt? – user1987607
Versuchen Sie zunächst, den gleichen Prozess mit 'factor' Variablen laufen, weil es sie umwandeln könnte zu "Charakter", wenn es versucht, Faktoren mit verschiedenen Ebenen zu verbinden. – AntoniosK
@AntioniosK: meine df1 hat 9000 Zeilen, meine df2 hat 862 Zeilen. Ihr Code arbeitete fließend mit einer kleinen Teilmenge, aber mit den vollständigen Daten wird es eine ganze Weile dauern Ich nehme an ... – user1987607