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

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

en Python je pourrais construire un Set d'un vecteur pour y parvenir, mais comment puis-je le faire en R?

37
demandé sur Ahmad F 2012-05-27 00:47:14

3 réponses

Vous pouvez consulter unique fonction.

 > v = c(1, 1, 5, 5, 2, 2, 6, 6, 1, 3)
 > unique(v)
 [1] 1 5 2 6 3
63
répondu sus_mlm 2015-03-01 22:11:44

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

v[duplicated(v)]
10
répondu dardisco 2013-08-22 01:55:12

pour supprimer les éléments dupliqués contigus seulement, 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

NA retournée par lag() supprime la première valeur, de garder à la première valeur, vous pouvez modifier la valeur par défaut à 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
0
répondu Paul Rougieux 2018-08-23 09:42:38