J'ai les deux cadres de données suivants (exemple):
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
Je voudrais supprimer les lignes dans df1
pour lesquelles df1$name = df2$name
obtenir ce qui suit:
Sortie:
name profile type strand
D 14.0 1 -
E 45.1 1 -
F 32.8 1 -
Si quelqu'un pouvait me dire quel code utiliser, ce serait beaucoup d'aide, cela paraissait simple au début, mais je le déconne depuis hier.
Vous avez besoin de l'opérateur %in%
. Alors,
df1[!(df1$name %in% df2$name),]
devrait vous donner ce que vous voulez.
df1$name %in% df2$name
teste si les valeurs dans df1$name
sont dans df2$name
!
inverse le résultat.Cela s'appelle parfois un anti-join :
library(dplyr)
anti_join(df1, df2, by = "name")
df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]
J'ai dû ajouter as.character
à mon exécution car name
n'est pas un caractère mais un facteur. %in%
n'est-il pas censé convertir cela directement?