如何在向量中查找仅出现少于X次的所有值

时间:2013-12-28 10:20:59

标签: r frequency-distribution

我有一个向量,在这种情况下是一个字符向量。我想要所有在向量中只出现一次的元素,但是解决方案应该适用于除1之外的限制。

如果我使用table功能,我可以手动选择它们。我认为解决方案看起来像

frequencies <- table(myVector)
myVector[??@frequencies <= 1] 

但首先,我不知道将要进入的插槽名称,并且在table对象上搜索文档会导致我无处可去。

第二,虽然the documentation for table()说它返回'一个类的对象“表”',尝试使用一些随机字而不是??,我没有得到“没有这样的插槽”错误,但是

  

错误:尝试从没有插槽的基本类(“函数”)的对象获取插槽“频率”

这似乎表明,即使我知道插槽名称,上述操作也无法正常工作。

那么什么是正确的解决方案,以及如何在需要时在table的单独列中获取它们?

2 个答案:

答案 0 :(得分:4)

噢,桌面功能的文档让我对虚构的对象插槽进行了快乐的追逐。

无论table()函数返回什么,它都充当一个简单的数字向量。所以我的解决方案想法在写成时起作用:

threshold <- 1
frequencies <- table(myVector)
frequencies[frequencies <= threshold] 

答案 1 :(得分:1)

您不需要table

vector <- c(1, 0, 2, 2, 3, 2, 1, 4)
threshold <- 1
Filter(function (elem) length(which(vector == elem)) <= threshold, vector)
# [1] 0 3 4

可以使用table,但是你得到的结果是字符串而不是数字。当然,你可以将它们转换回来,但它不那么优雅:

tab <- table(vector)
names(tab)[tab <= threshold]
# [1] "0" "3" "4"