3

我有 4 个列表

a <- list(1,2,3,4)
b <- list(5,6,7,8)
c <- list(7,9,0)
d <- list(12,14)

我想知道哪些列表有共同的元素。在此示例中,列出bc具有共同的元素 7。

蛮力方法是采用列表的每个组合并找到交集。在 R 中还有其他有效的方法吗?

另一种方法是从所有列表中创建一个列表并找到重复项。然后也许我们可以有一个映射函数来指示这些重复项来自哪个原始列表。但我不太确定该怎么做。我偶然发现了这个帖子

查找重复行的索引

我在想我们是否可以修改它以找出具有重复项的实际列表。

我必须对多组列表重复此过程。非常感谢任何建议/想法!提前致谢

4

1 回答 1

8

使用这个 double怎么样sapply

l <- list(a,b,c,d)

sapply(seq_len(length(l)), function(x) 
  sapply(seq_len(length(l)), function(y) length(intersect(unlist(l[x]), unlist(l[y])))))
     [,1] [,2] [,3] [,4]
[1,]    4    0    0    0
[2,]    0    4    1    0
[3,]    0    1    3    0
[4,]    0    0    0    2

l解释:例如,矩阵的元素 [1,2] 显示列表的第一个元素(在本例中为 sublist a)与第二个列表元素(即sublist b)共有多少个元素

或者只是查看与其他子列表具有共同值的子列表的索引:

which(sapply(seq_len(length(l)), function(x) length(intersect(l[[x]], unlist(l[-x])))) >= 1)
[1] 2 3
于 2015-05-22T22:52:02.583 回答