我有两个大矩阵[285600 x 2]和[167830 x 2]矩阵。 我想找到它们之间的公共行,以及它们之间的对应索引。 有谁知道这样做的快速方法? 感谢。
编辑1:每列矩阵中的元素不是唯一的,但矩阵中的每一行都是唯一的。
编辑2:我的代码:
a <- rbind(m1 , m2)
dup <- a[duplicated(a),]
ind <- mlapply(1:length(dup), function(x) which(m1[,1]==dup[x,1] & m1[,2]==dup[x,2]))
答案 0 :(得分:1)
这有点难看,但它完成了工作。我认为最简单的方法是将行号分配给另一列,然后加入这两列。我对数据表比较熟悉,所以我走了那条路。
首先,一些示例数据:
m1 = matrix(c(1, 9, 2, 4, 5, 7), nrow=3, ncol=2)
m2 = matrix(c(1, 1, 3, 9, 4, 7), nrow=3, ncol=2)
然后我的解决方案:
library(data.table)
m1 <- data.table(m1)
setkey(m1, 'V1', 'V2')
m1[,"index1" := .I]
m2 <- data.table(m2)
setkey(m2, 'V1', 'V2')
m2[,"index2" := .I]
# Join the tables by key #
m3 <- m1[m2]
overlap <- m3[is.na(index1)==FALSE & is.na(index2)==FALSE,]
答案 1 :(得分:0)
让我们调用你的矩阵m1和m2,每行r1和r2:
row1_matches <- which(m1$r1 == m2$r1)
row2_matches <- which(m1$r2 == m2$r2)
both_rows_matches <- which(row1_matches == row2_matches)
这将为您提供所有匹配的索引值