it-swarm.com.de

Zeilen löschen, die in einem anderen Datenrahmen vorhanden sind?

Ich habe die zwei folgenden Datenrahmen (Beispiel):

df1:

name    profile    type    strand
A       4.5        1       +
B       3.2        1       +
C       5.5        1       +
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -
G       19.9       1       +

df2:

name
A
B
C
G

Ich möchte die Zeilen in df1 löschen, für die df1$name = df2$name Folgendes erhalten soll:

Ausgabe:

name    profile    type    strand
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -

Wenn mir jemand sagen könnte, welchen Code er verwenden soll, wäre das eine große Hilfe, erschien mir anfangs einfach, aber ich habe es seit gestern vermasselt.

29
biohazard

Sie benötigen den Operator %in%. So, 

df1[!(df1$name %in% df2$name),]

sollte dir geben, was du willst.

  • df1$name %in% df2$name prüft, ob die Werte in df1$name in df2$name liegen.
  • Der !-Operator kehrt das Ergebnis um.
37
csgillespie

Dies wird manchmal als anti-join bezeichnet:

library(dplyr)
anti_join(df1, df2, by = "name")
21
Hugh
df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]

Ich musste as.character zu meiner Ausführung hinzufügen, da name kein Zeichen, sondern ein Faktor ist. Soll %in% das nicht direkt konvertieren?

1
user2635283