web-dev-qa-db-fra.com

Comment supprimer des éléments répétés dans un vecteur, similaire à 'set' dans Python

J'ai un vecteur avec des éléments répétés et je voudrais les supprimer pour que chaque élément n'apparaisse qu'une seule fois.

En Python je pourrais construire un Set à partir d'un vecteur pour y parvenir, mais comment puis-je faire cela dans R?

41
ashim

Vous pouvez vérifier la fonction unique .

 > v = c(1, 1, 5, 5, 2, 2, 6, 6, 1, 3)
 > unique(v)
 [1] 1 5 2 6 3
67
sus_mlm

Cela fait la même chose. Plus lent, mais utile si vous souhaitez également un vecteur logique des doublons:

v[duplicated(v)]
11
dardisco

Pour supprimer uniquement les éléments dupliqués contigus, vous pouvez comparer le vecteur avec une version décalée de lui-même:

v <- c(1, 1, 5, 5, 5, 5, 2, 2, 6, 6, 1, 3, 3)
v[c(TRUE, !v[-length(v)] == v[-1])]
[1] 1 5 2 6 1 3

La même chose peut être écrite un peu plus élégamment en utilisant dplyr :

library(dplyr)
v[v != lag(v)]
[1] NA  5  2  6  1  3

Le NA renvoyé par lag () supprime la première valeur, pour conserver la première valeur, vous pouvez changer la valeur par défaut en une valeur qui sera différente de la première valeur.

v[v != lag(v, default = !v[1])]
[1] 1 5 2 6 1 3
2
Paul Rougieux