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?
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
Cela fait la même chose. Plus lent, mais utile si vous souhaitez également un vecteur logique des doublons:
v[duplicated(v)]
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