首页 > 解决方案 > R:: 我有一个向量列表,我如何计算两个向量在所有组合中共有的元素数量?

问题描述

我有一个向量列表...

A <- c("a", "b", "c", "d", "e")

B <- c("b", "e", "f", "g")

C <- c("c", "f", "g", "h", "i")

listofvectors <- list(A, B, C)

如何检查每个组合共有的元素数量?所以这将是一个比较矩阵,具有共同的数字。这将给出代码指定的格式

output <- matrix(c(5, 2, 1, 2, 4, 2, 1, 2, 5), nrow = 3, ncol = 3)

dimnames(output) = list(c("A", "B", "C"), c("A", "B", "C"))
#  A B C
#A 5 2 1
#B 2 4 2
#C 1 2 5

对于单个向量,我可以使用A[A %in% B],但我的实际列表有 300 多个向量,因此对每个组合执行此操作需要一段时间。

理想情况下,我想避免使用循环。我还看到该函数combn()可能对完成每个排列很有用。

任何帮助,将不胜感激。

标签: r

解决方案


我不确定我是否理解 100%,但也许这对你有用:

l <- list(A,B,C)
sl_ <- seq_along(l)
eg_ <- expand.grid(sl_, sl_)

matrix(mapply(function(x,y) length(intersect(l[[x]],l[[y]])),eg_$Var1, eg_$Var2 ),nrow=length(l))
#      [,1] [,2] [,3]
# [1,]    5    2    1
# [2,]    2    4    2
# [3,]    1    2    5

它没有经过优化,所以如果您有速度或内存问题,请告诉我。


推荐阅读