在m个向量中至少n个中找到共享元素(n <m)

时间:2018-02-09 13:38:45

标签: r

lists <- lapply(vector("list", 5), function(x) sample(1:100,50,replace=T))

如何提取lists内(或通常在一组向量中)至少n(2,3,4,5)个向量中存在的所有值?
对于n = 5,此question已经给出了解决方案(例如intersect()),但对于n

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您可以按照以下方式进行操作。假设您对至少3个列表元素之间共享的值感兴趣。

combos <- combn(seq_along(lists), 3, simplify = FALSE)
lapply(combos, function(i) Reduce(intersect, lists[i]))

如果您只对实际值感兴趣,

unique(unlist(lapply(combos, function(i) Reduce(intersect, lists[i]))))

combos中,我们存储了长度为n的列表的所有可能组合(此处为3)。

答案 1 :(得分:2)

您可以使用unique简单地缩小列表,然后将其合并到一个unlist的向量中,并使用table进行计数。

n <- 3
names(which(table(unlist(lapply(lists, unique))) >= n))

此代码的输出是名称的矢量。