我想按以下方式重新排列矩阵 b:
> b <- matrix(1:24, 6, 4)
> b
[,1] [,2] [,3] [,4]
[1,] 1 7 13 19
[2,] 2 8 14 20
[3,] 3 9 15 21
[4,] 4 10 16 22
[5,] 5 11 17 23
[6,] 6 12 18 24
> cbind(b[1:2, ], b[3:4, ], b[5:6, ])
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 1 7 13 19 3 9 15 21 5 11 17 23
[2,] 2 8 14 20 4 10 16 22 6 12 18 24
行数(此处为 2)始终相同,但矩阵 b 将非常大,尺寸约为 1M x 100。有没有一些快速的方法可以不用 for环形?谢谢。
最佳答案
首先,使用 lapply
将 b
分成两行的 block ,然后使用 do.call将子组
.cbind
在一起
do.call(cbind, lapply(seq(1, NROW(b), 2), function(i) b[i:(i+1),]))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
#[1,] 1 7 13 19 3 9 15 21 5 11 17 23
#[2,] 2 8 14 20 4 10 16 22 6 12 18 24
另一种方法是将奇数行和偶数行的元素分成两个向量并rbind
它们
rbind(do.call(c, data.frame(t(b[(1:NROW(b) %% 2) == 1,]))),
do.call(c, data.frame(t(b[(1:NROW(b) %% 2) == 0,]))))
# X11 X12 X13 X14 X21 X22 X23 X24 X31 X32 X33 X34
#[1,] 1 7 13 19 3 9 15 21 5 11 17 23
#[2,] 2 8 14 20 4 10 16 22 6 12 18 24
还有一种方法,在很大程度上与第二种方法类似
do.call(rbind, lapply(split(data.frame(b), 1:2), function(x) do.call(c, data.frame(t(x)))))
# X11 X12 X13 X14 X31 X32 X33 X34 X51 X52 X53 X54
#1 1 7 13 19 3 9 15 21 5 11 17 23
#2 2 8 14 20 4 10 16 22 6 12 18 24
关于r - 在 R 中通过 cbind 合并相同大小的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200627/