从向量中提取非重复值(不保留重复值中的一个)

8

我希望能够从向量中保留非重复值,但不保留重复值中的任一元素。unique()函数无法做到这一点,duplicated()函数也不行。

例如:

> test <- c(1,1,2,3,4,4,4,5,6,6,7,8,9,9)
> unique(test)
[1] 1 2 3 4 5 6 7 8 9

我希望结果是:2、3、5、7、8。你们有什么好的方法吗?谢谢!

2个回答

11

我们可以使用 duplicated

test[!(duplicated(test)|duplicated(test, fromLast=TRUE))]
#[1] 2 3 5 7 8

1
我认为这应该被勾选 - 尽可能使用向量而不是拆分和循环更好。 - user20650

9
您可以使用ave函数来计算test中按照唯一值分组后的子组长度,并保留仅包含一个元素的子组(即没有重复项的子组)。
test[ave(test, test, FUN = length) == 1]
#[1] 2 3 5 7 8

如果test是由字符组成的,请将seq_along用作ave的第一个参数。
test[ave(seq_along(test), test, FUN = length) == 1]

这可能不适用于字符向量吗? - arielle
1
这里不需要匿名函数。 - Pierre L
1
好的,现在你已经毕业了 :) - Pierre L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接