【问题标题】:How to compare row-wise two different matrices exhaustively in R?如何在 R 中逐行比较两个不同的矩阵?
【发布时间】:2020-07-15 13:57:11
【问题描述】:

我有两个矩阵(mat1 和 mat2),列数相同(每个四列)和行数不同(一个矩阵有 3 个,另一个有 5 个)。我想将一个矩阵中的每一行与另一个矩阵中的每一行进行比较。行中的值和位置在两个矩阵中应该相同。 我一直在尝试“应用”函数,但在定义函数时遇到问题:apply(mat2,1,function(x){mat1[x,]==mat2 [x,]} 和其他类似组合会导致消息“下标越界”。 我是这个世界的新手(R 和编程),在网上有搜索信息,但我什么也没找到。我真的被困住了。 非常感谢您的帮助。 提前致谢。 鲤鱼

> 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

【问题讨论】:

标签: r matrix compare rowwise


【解决方案1】:

1.申请

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

2.轻拍

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

3.应用

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

【讨论】:

  • @Carpa 如果我的回答解决了您的问题,请将其标记为“已接受”。阅读this page 了解有关接受答案的更多详细信息。
猜你喜欢
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多