2016-07-28 7 views
0

Ich habe zwei data.frame-Objekte, die ihr relatives Komplement von einem zum anderen setzen müssen. Ich habe ähnliche Post von dieser Seite überprüft, sicherlich fragte jemand schon, aber es ging um Vektor, und es ist okay. Ich habe jedoch versucht, eine Lösung aus bestehenden Post auf dieser Website, aber ich habe meine erwartete Leistung nicht erhalten. Ich versuchte mehrere Ansätze wie setdiff, pmatch umgekehrt, keine von ihnen gibt meine erwartete Ausgabe zurück. Kann irgendjemand einen möglichen Weg vorschlagen, diese Aufgabe effizient zu erfüllen?Wie man relative Ergänzung eines data.frames in einem anderen erhält?

Beispiel

foo <- data.frame(start=seq(1, by=4, len=6), stop=seq(3, by=4, len=6)) 
bleh <- data.frame(start=seq(1, by=5, len=5), stop=seq(3, by=5, len=5)) 

gewünschte Ausgabe:

Nach settheorie in Wiki ergänzen, meine erwartete Ausgabe wie folgt:

start stop 
1  5 7 
2  9 11 
3 13 15 
4 17 19 

Wie kann ich relevante Ergänzung Satz von einem Daten erhalten .frame zum anderen? Was ist der richtige Weg, um diese Aufgabe zu erfüllen?

Dank

Antwort

2

try this

library(dplyr) 
output <- anti_join(foo,bleh) 
output[order(output$start),] 

Eine weitere Option setdiff von dplyr Paket (@Frank Danke für die Korrektur)

setdiff(foo,bleh) 
# start stop 
#1  5 7 
#2  9 11 
#3 13 15 
#4 17 19 
+0

ist das möglich ein bisschen mehr zu verbessern? Ich meine, ordne sie (sowohl in der Reihe als auch in ihrem Index) auf schöne Weise. Thx – datageek

+0

Ich versuchte auch so: base :: setdiff (foo, bleh), aber es stimmte nicht mit meiner erwarteten Ausgabe überein. Hast du meine Ausgabe erhalten, wenn du setdiff benutzt hast? Es ist seltsam, warum ich dann eine andere Ausgabe bekomme? – datageek

+1

Nein, diese setdiff Funktion stammt auch von dplyr, und es ist meiner Meinung nach ein besserer Weg als anti_join, da jede Tabelle als eine Menge behandelt wird (ignoriert duple Reihen). – Frank

Verwandte Themen