假设我们有两个矩阵,分别是M1
和M2
,分别为n1 x m
和n2 x m
。
我们如何才能找到哪些M1
行与M2
的那些行相同(反之亦然)?
首选输出是一个矩阵,其行数等于矩阵M1
和M2
之间的标识行,两列,即第一列将包含该数字矩阵M1
的行,第二行矩阵M2
的行数。
答案 0 :(得分:1)
创建包含4个匹配行的示例矩阵
set.seed(0)
M1 <- matrix(runif(100), 10)
M2 <- rbind(M1[sample(10, 4),], matrix(runif(60), 6))
创建输出
splits <- lapply(list(M1, M2), function(x) split(x, row(x)))
out <- cbind(M1 = seq(nrow(M1)), M2 = do.call(match, splits))
out[!is.na(out[,2]),]
# M1 M2
# [1,] 2 4
# [2,] 3 3
# [3,] 6 2
# [4,] 7 1
答案 1 :(得分:1)
可能有一种更流畅的方式,但这似乎有效...
#dummy data
M1 <- matrix(1:8,ncol=2)
M2 <- matrix(c(1,3,4,5,6,8),ncol=2)
M1
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
M2
[,1] [,2]
[1,] 1 5
[2,] 3 6
[3,] 4 8
which(apply(M2, 1, function(v)
apply(M1, 1, function(w) sum(abs(w-v))))==0,
arr.ind = TRUE)
row col
[1,] 1 1
[2,] 4 3
row
列是M1的行索引,col
列是M2中匹配行的索引。