2016-06-08 7 views
1

Ich habe einen Datenrahmen (df1) mit mehr als 200 Spalten, die Daten enthalten (jeweils mehrere tausend Zeilen). Spaltennamen sind alphanumerisch und alle voneinander verschieden.In R, wie lösche ich Zeilen in einem Datenrahmen nach Spaltennamen eines anderen Datenrahmens?

Ich habe einen zweiten Datensatz (df2) mit ein paar Spalten, in denen die erste Spalte (mit dem Namen 'col1') Zeilen mit "Werten" enthält, die Spaltennamen von df1 tragen.

Aber nicht für jede Zeile in DF2 habe ich eine entsprechende Spalte in DF1.

Jetzt möchte ich löschen (drop) alle Zeilen in df2 wo gibt es keine "entsprechende" Spalte in DF1.

Ich suchte eine ganze Weile mit Keywords wie "Teilmenge data.frame nach Werten aus einem anderen data.frame", fand aber keine Lösung. Ich überprüfte z.B. here, here oder here und einige andere Orte.

Danke für Ihre Hilfe.

+0

Können Sie sich einen kleinen reproduzierbaren Beispiel erstellen? [Siehe hier Tipps] (http://stackoverflow.com/q/5963269/903061) - verwenden Sie integrierte Daten oder simulieren Sie Daten oder verwenden Sie 'dput()', um reproduzierbar zu teilen. – Gregor

+1

Aber was Sie wollen, ist 'df2 [df2 $ col1% in% name (df1),]'. Es scheint überhaupt nicht wichtig zu sein, dass "df1" ein Datenrahmen ist, das einzige, was zählt, ist, dass Sie einen Vektor von Werten haben, die Sie behalten wollen, und das ist zufällig 'names (df1)'. – Gregor

+0

Dank @Gregor und Effel. Du hast es geschafft! – Slyrs

Antwort

3

Daten:

df1 <- data.frame(a = 1:3, b = 1:3) 
# a b 
# 1 1 1 
# 2 2 2 
# 3 3 3 

df2 <- data.frame(col1 = c("a", "c")) 
# col1 
# 1 a 
# 2 c 

Halten Reihen in df2, deren Werte sind Namen in df1:

subset(df2, col1 %in% names(df1)) 
# col1 
# 1 a