查找R

时间:2015-07-01 21:18:10

标签: r matrix

我有两个大矩阵[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]))

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)

这将为您提供所有匹配的索引值