41 votes

Comment puis-je sélectionner des lignes d'une trame de données qui ne correspondent pas ?

J'essaie d'identifier les valeurs d'un bloc de données qui ne correspondent pas, mais je ne sais pas comment procéder.

 # 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 simplement 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.

66voto

Chase Points 27342

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

25voto

Ramnath Points 24798

Essayez la fonction de différence définie setdiff . Donc tu aurais

 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

17voto

Joe Points 2572

Vous pouvez également utiliser dplyr pour cette tâche. Pour trouver ce qui est dans b mais pas a :

 library(dplyr)    
anti_join(b, a, by = c("y" = "x"))

#   y
# 1 5
# 2 6

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X