Строки идентичности между двумя матрицами в R - PullRequest
0 голосов
/ 07 июня 2018

Допустим, у нас есть две матрицы, то есть M1 и M2, с размерами n1 x m и n2 x m, соответственно.

Как мы можем найти, какие строки M1 идентичныM2 (и наоборот)?

Предпочтительным выходом является матрица, число строк которой равно единичным строкам между матрицами M1 и M2 и двум столбцампервый столбец будет содержать номер строки матрицы M1, а второй - номер строки матрицы M2.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Возможно, есть более скользкий путь, но, похоже, это работает ...

#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 - это индекс совпадающих строк.в М2.

0 голосов
/ 07 июня 2018

Создание примеров матриц с 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
...