r - 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()
可能对完成每个排列很有用。
任何帮助,将不胜感激。
解决方案
我不确定我是否理解 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
它没有经过优化,所以如果您有速度或内存问题,请告诉我。
推荐阅读
- r - 在 R write.csv 中,但仅包含特定列
- algorithm - 什么是 Theta(n) 算法,用于在具有 indegree(n-1) 和 outdegree(0) 的有向邻接矩阵中查找节点?
- python - 如何对张量矩阵进行切片和汇总
- mysql - 是否可以引用另一列来创建“组合”查询?
- android - NativeScript - 由于 tns-ios 平台不受支持,apk 构建失败?
- c# - 车辆贷款计算器 - 我的程序无法输出正确的值
- python - 在 PyCharm Professional 中安装 Jupyter 问题
- c# - 在列表 ASP.NET Core 中添加具有相同日期的值
- sql-server - 使用 r2dbc-mssql 指定架构
- php - 删除空格或替换为自动生成的 ID 标签的下划线