Как исчерпывающе сравнить по строкам две разные матрицы в R? - PullRequest
2 голосов
/ 03 апреля 2020

У меня есть две матрицы (mat1 и mat2) с одинаковым количеством столбцов (по четыре в каждой) и разным количеством строк (одна матрица имеет три, а другая пять). Я хотел бы сравнить каждую строку в одной матрице с каждой строкой в ​​другой матрице. Значения и позиция в строке должны быть одинаковыми в обеих матрицах. Я пробовал функцию «применить», но у меня возникли проблемы при определении функции: apply(mat2,1,function(x){mat1[x,]==mat2 [x,]} и другие подобные комбинации приводят к сообщению «индекс за пределами». Я очень новичок в этом мире (программирование и программирование), у меня есть информация для поиска в Интернете, но я ничего не нашел. Я действительно застрял. Я был бы очень признателен за вашу помощь. Заранее спасибо. Карпа

> mat1
     [,1] [,2] [,3] [,4]
[1,]    2   44    3    9
[2,]   13   56   13   13
[3,]    4    9   14   33
> mat2
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20
> 
The output that I am looking for is:

> [1,]
     [,1] [,2] [,3] [,4]
[1,]    FALSE FALSE FALSE FALSE
[2,]    TRUE  FALSE FALSE FALSE
[3,]    FALSE FALSE FALSE FALSE
[4,]    FALSE FALSE FALSE FALSE
[5,]    FALSE FALSE FALSE FALSE

> [2,]
     [,1] [,2] [,3] [,4]
[1,]    FALSE FALSE FALSE FALSE
[2,]    FALSE FALSE FALSE FALSE
[3,]    FALSE FALSE  TRUE FALSE
[4,]    FALSE FALSE FALSE FALSE
[5,]    FALSE FALSE FALSE FALSE

> [3,]
     [,1] [,2] [,3] [,4]
[1,]    FALSE FALSE FALSE FALSE
[2,]    FALSE FALSE FALSE FALSE
[3,]    FALSE FALSE FALSE FALSE
[4,]    TRUE  TRUE  TRUE  FALSE
[5,]    FALSE FALSE FALSE FALSE

1 Ответ

1 голос
/ 03 апреля 2020

1. применить

array(apply(mat1, 1, function(x) t(x == t(mat2))), dim = c(dim(mat2), nrow(mat1)))

2. tapply

tapply(mat1, row(mat1), function(x) t(x == t(mat2)))

3. lapply

lapply(split(mat1, row(mat1)), function(x) t(x == t(mat2)))

Выход

$`1`
      [,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE

$`2`
      [,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE  TRUE FALSE
[4,] FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE

$`3`
      [,1]  [,2]  [,3]  [,4]
[1,] FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE
[4,]  TRUE  TRUE  TRUE FALSE
[5,] FALSE FALSE FALSE FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...