在两个矩阵上使用 rbind 来匹配行

Using rbind on two matrices to match rows

我有两个数据框,matrix Amatrix B,结构类似于

matrix A
       [,1] [,2]  [,3]  [,4] 
 [1,]   121  114   117   200 
 [2,]   312  215    78   211
 [3,]   413  121   719   117
 
matrix B
       [,1] [,2]  [,3]  [,4] 
 [1,]   120  119   112   220 
 [2,]     0    7     1     2
 [3,]   412  111   713   113
 

我想创建一个新的数据框列表,每个子列表都是来自两个矩阵的匹配行值。因此,例如,列表中的第一个新数据框将是

matrix C1
       [,1] [,2]  [,3]  [,4] 
 [1,]   121  114   117   200 
 [2,]   120  119   112   220

C1 中的第 1 行是矩阵 A 中的第 1 行,此新矩阵中的第 2 行是矩阵 B 中的第 1 行。矩阵 C2 是矩阵 A 和 B 中的第 2 行,依此类推

我知道我必须在某一时刻使用 rbind(),但我不知道如何获得我想要的输出?

下面是一个使用行索引的例子:

# matrix1
M1 <- matrix(c(3:14), nrow = 4, byrow = TRUE)

# matrix2
M2 <- matrix(c(13:24), nrow = 4, byrow = TRUE)

M3 <- rbind(M1[1,], M2[2,])
M3
     [,1] [,2] [,3]
[1,]    3    4    5
[2,]   16   17   18

BaseR,

lapply(1:nrow(matrixA), function(x) rbind(matrixA[x,],matrixB[x,]))

给予,

[[1]]
         [,1]     [,2]     [,3]
[1,] 52.81736 68.83760 92.26946
[2,] 49.17765 59.02276 15.89793

[[2]]
         [,1]     [,2]     [,3]
[1,] 48.21500 35.82741 11.52465
[2,] 33.05838 23.17105 70.05778

[[3]]
         [,1]     [,2]     [,3]
[1,] 52.93969 84.12350 21.44636
[2,] 47.69968 73.66894 27.14668

假数据:

    matrixA <- matrix(runif(9,1,100),3)
    matrixB <- matrix(runif(9,1,100),3)

您可以将它们放在一个数组中并使用 aperm

起始数据

matrixA <- matrix(runif(9,1,100),3)
matrixB <- matrix(runif(9,1,100),3)
list(matrixA, matrixB)    
#> [[1]]
#>           [,1]     [,2]     [,3]
#> [1,]  7.726875 88.77164 32.74513
#> [2,] 60.005675 26.94784 68.45881
#> [3,] 43.514952 94.43019 21.05740
#> 
#> [[2]]
#>          [,1]     [,2]      [,3]
#> [1,] 13.48753 65.43023 47.474468
#> [2,] 48.18658 25.19455 16.581541
#> [3,] 60.94665 58.46271  9.016365

做一个数组然后aperm

list(matrixA, matrixB) |>
  simplify2array() |>
  aperm()
#> , , 1
#> 
#>           [,1]     [,2]     [,3]
#> [1,]  7.726875 88.77164 32.74513
#> [2,] 13.487534 65.43023 47.47447
#> 
#> , , 2
#> 
#>          [,1]     [,2]     [,3]
#> [1,] 60.00567 26.94784 68.45881
#> [2,] 48.18658 25.19455 16.58154
#> 
#> , , 3
#> 
#>          [,1]     [,2]      [,3]
#> [1,] 43.51495 94.43019 21.057402
#> [2,] 60.94665 58.46271  9.016365

reprex package (v2.0.1)

于 2021-12-07 创建