如何删除向量中的重复元素,类似于Python中的“set”

时间:2012-05-26 20:47:15

标签: python r duplicates

我有一个带有重复元素的向量,并希望删除它们,以便每个元素只出现一次。

在Python中,我可以从向量构造一个Set来实现这一点,但是我怎么能在R中做到这一点?

3 个答案:

答案 0 :(得分:65)

您可以查看unique功能。

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

答案 1 :(得分:11)

这也是一样的。较慢,但如果您还需要重复项的逻辑向量,则非常有用:

v[duplicated(v)]

答案 2 :(得分:1)

要仅删除连续重复的元素,可以将向量与自身的偏移版本进行比较:

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

使用dplyr可以更优雅地写出相同的内容:

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

lag()返回的NA删除第一个值,以保留第一个值,您可以将默认值更改为与第一个值不同的值。

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