2016-08-04 3 views
2

Wir können 2 Datenrahmen mit df = rbind(df, another_df) kombinieren. Wie sollte es sein, wenn es erforderlich ist, another_df von df zu entfernen, wo Rownames von df und another_df nicht übereinstimmen.Entfernen Sie eine Teilmenge von Datensätzen aus einem Datenrahmen in r

df = data.frame(A=c('a','aa','aaa'), B=c('b','bb','bbb')) 
rownames(df) 

another_df =data.frame(A=c('aa','a'), B=c('bb','b')) 
rownames(another_df)=c('3','4') 
+1

Bitte zeigen Sie eine der Teilmenge reproduzierbares kleines Beispiel und erwartete Ausgabe. Ich würde nach 'setdiff' oder' anti_join' aus 'dplyr' überprüfen. – akrun

+0

Pro Kommentar darüber kann Ihnen vielleicht helfen, ein gutes Beispiel zu machen http://StackOverflow.com/Help/Mcve –

+0

Dank AKRUN, anti_join von dplyr hat den Job gemacht :) Ich würde gerne als Antwort akzeptieren, wenn du es postest :) – SaikiHanee

Antwort

2

Wir verwenden anti_join

library(dplyr) 
anti_join(df, another_df) 

Oder wenn dies auf dem rownames basiert, dann %in% kann zum Erstellen eines logischen Index verwendet werden, um die Zeilen

df[!row.names(df) %in% row.names(another_df),] 
0

Sie können dies tun, ohne ein Paket sehr einfach mit setdiff zu verwenden.

df = data.frame(A=c('a','aa','aaa'), B=c('b','bb','bbb')) 
another_df =data.frame(A=c('aa','a'), B=c('bb','b')) 
s <- df[setdiff(rownames(df),rownames(another_df)),] 

s ist die gewünschte Ausgabe.

Verwandte Themen