Ich möchte die Zeilen aus ds1
auswählen, deren alle Spaltenwerte im zweiten Datenrahmen ds2
vorhanden sind. Ich habe diesen langen Weg gefunden, aber es gibt eine eingebaute Funktion, die den Prozess vereinfacht.Wählen Sie Zeilen aus einem Datenrahmen aus, in dem alle Spaltenwerte im zweiten Datenrahmen vorhanden sind.
ds1 = data.frame(x=c(0,3,2,4,5), y=c(6,7,8,9,10), z=c(11,12,13,14,16))
ds2 = data.frame(x=c(1,2,3,4,5), y=c(6,7,8,9,10), z=c(11,12,13,14,15))
Da die Werte ds1$x[1]
und ds1$z[5]
existieren nicht in Spalten: ds2$x
und ds2$z
bzw. sollten solche Zeilen nicht berücksichtigt, so Endergebnis sein sollte:
x y z
2 3 7 12
3 2 8 13
4 4 9 14
daher die Zeilen: ds1[2:4,]
, Ich fand diesen langen Weg:
result <- matrix(NA, nrow(ds1), ncol(ds1))
count = 1
for (i in names(ds2)) {
result[,count] <- ds1[, i] %in% ds2[, i]
count <- count + 1
}
rows = rep(NA, nrow(ds1))
for (i in 1:length(rows)) {
rows[i] = all(result[i,])
}
# Finally:
ds1[rows,]
Ich vermute, es sollte einen einfacheren Weg existieren mit einigen integrierten funktionskombinationen google ich, aber ich habe keinen ähnlichen fall gefunden.
Hinweis: Ich war mit merge, zum Beispiel zu spielen: merge(ds1,ds2)
:
> merge(ds1, ds2)
x y z
1 4 9 14
, sondern weil die Spaltenelemente in unterschiedlichen Reihen wie in sein können: ds1$x[2] == ds2$x[3]
und ds1x[3] == ds2$x[2]
, funktioniert es nicht und Ich weiß nicht, wie man die zusätzlichen Zusammenführungsargumente einstellt, um das erwartete Ergebnis zu erhalten.
'% in% ', wie unten dargestellt ist vorzuziehen, aber man könnte es mit ein paar tun von Verknüpfungen -' merge (merge (DS1, DS2 [" gefunden x "]), ds2 [" z "])' – thelatemail