在两个矩阵上使用 rbind 来匹配行
Using rbind on two matrices to match rows
我有两个数据框,matrix A
和 matrix 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 创建
我有两个数据框,matrix A
和 matrix 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 创建