Trouver des éléments qui ne se chevauchent pas entre deux vecteurs
Je suis en train d'essayer d'identifier les éléments qui ne sont pas inclus dans l'autre vecteur. Par exemple, dans deux vecteurs, j'ai
list.a <- c("James", "Mary", "Jack", "Sonia", "Michelle", "Vincent")
list.b <- c("James", "Sonia", "Vincent")
est-il un moyen de vérifier laquelle les gens ne se chevauchent pas? Dans l'exemple, je voudrais obtenir le vecteur résultat qui contient Marie, Jack, et Michelle.
Des suggestions aidera!
OriginalL'auteur song0089 | 2014-02-05
Vous devez vous connecter pour publier un commentaire.
Oui, il y a un moyen:
si vous regardez le code source pour
setdiff
vous verrez que c'est facile à modifier pour ne pas ignorer les doublonsmerci; je vais aller chercher ça.
J'ai posté un "flexible" version de setdiff, juste pour info 🙂
OriginalL'auteur Julius Vainora
Une longue réponse sur la base des observations de Hadley et de moi-même: voici comment autoriser les doublons.
Final Edit: je ne recommande à personne l'utiliser, car le résultat peut ne pas être ce que vous attendez. Si il y a une répétition de la valeur dans
x
qui n'est pas dansy
, vous verrez que la valeur répété dans la sortie. Mais: si, par exemple, il y a quatre9
s dansx
et un9
dansy
, tous les9
s sera supprimé. On pourrait s'attendre à conserver trois d'entre eux; qui prend messier code.if
déclaration et appelunique
sur que dans le cas!multiple
. Il serait plus facile à lire.OriginalL'auteur Carl Witthoft
Je pense qu'il devrait être mentionné que la accepté réponse est n'est que partiellement correcte.
La commande
setdiff(list.a, list.b)
constate le non-cumul des éléments que si ces éléments sont contenus dans l'objet qui est utilisé comme premier argument!.Si vous n'êtes pas au courant de ce comportement et n'a
setdiff(list.b, list.a)
au lieu de cela, les résultats seraientcharacter(0)
dans ce cas, qui vous amènerait à conclure qu'il n'y a pas de non-chevauchement des éléments.Légèrement à l'aide d'un exemple pour illustration, une évidente quick fix est:
OriginalL'auteur Manuel R
Un joli one-liner qui s'applique à des doublons:
Renvoie le bloc de données {2,2}. Ceci, cependant, ne s'applique pas au cas de 1,2 en 1,1,2,2, parce qu'il le trouve deux fois
OriginalL'auteur Noale