给出一个向量:
例如:
a = c(1, 2, 2, 4, 5, 3, 5, 3, 2, 1, 5, 3)
使用a[a%in%a[duplicated(a)]]
我可以删除不重复的值。但是,它仅适用于仅出现一次的值。
我将如何继续删除此三次中不存在的所有值? (或更多,在其他情况下)
预期结果将是:
2 2 5 3 5 3 2 5 3
删除1和4,因为它们仅出现两次且一次
答案 0 :(得分:8)
您可以使用ave
功能在一行中执行此操作:
a[ave(a, a, FUN=length) >= 3]
# [1] 2 2 5 3 5 3 2 5 3
对ave(a, a, FUN=length)
的调用会针对向量a[i]
中的每个元素a
返回a[i]
在a
中显示的总次数。然后,您可以对a
进行子集,限制总次数为3或更多的索引。
答案 1 :(得分:5)
合理简单(比使用ave
更长但可能更容易理解):
x <- c(1,2,2,4,5,3,5,3,2,1,5,3)
tt <- table(x) ## tabulate
## find relevant values
ttr <- as.numeric(names(tt)[tt>=3])
x[x %in% ttr] ## subset