J'essaie d'identifier les valeurs d'une trame de données qui ne correspondent pas, mais je ne sais pas comment faire cela.
# make data frame
a <- data.frame( x = c(1,2,3,4))
b <- data.frame( y = c(1,2,3,4,5,6))
# select only values from b that are not in 'a'
# attempt 1:
results1 <- b$y[ !a$x ]
# attempt 2:
results2 <- b[b$y != a$x,]
Si a = c(1,2,3)
cela fonctionne, car a
est un multiple de b
. Cependant, j'essaie de sélectionner toutes les valeurs de la trame de données y
, qui ne sont pas dans x
, et je ne comprends pas quelle fonction utiliser.
Si je comprends bien, vous avez besoin de la négation de l'opérateur %in%
. Quelque chose comme ça devrait fonctionner:
subset(b, !(y %in% a$x))
> subset(b, !(y %in% a$x))
y
5 5
6 6
Essayez la fonction de différence définie setdiff
. Vous auriez donc
results1 = setdiff(a$x, b$y) # elements in a$x NOT in b$y
results2 = setdiff(b$y, a$x) # elements in b$y NOT in a$x
Vous pouvez également utiliser dplyr
pour cette tâche. Pour trouver ce qui se trouve dans b
mais pas a
:
library(dplyr)
anti_join(b, a, by = c("y" = "x"))
# y
# 1 5
# 2 6