r - 有效地将长矩阵改组为由 R 中的列绑定子块(原始)组成的矩阵
问题描述
“我有一个很长的矩阵,测量 30^5 x 3 个条目。我基本上由 10.000 个 30 x 3 矩阵的子块组成,彼此堆叠。我想将它们彼此相邻地“绑定”(没有循环结构),导致 30 x 30^4 矩阵。
仅更改矩阵尺寸是行不通的,因为 R 会为每个单独的列填充新矩阵。
我确信有一种非常紧凑、超高效的方法可以做到这一点,一旦你向我提出明显的解决方案,我就会在额头上拍自己的耳光。
谢谢!”
“仅仅改变矩阵尺寸是行不通的,因为 R 会为每列填充新矩阵。”
```R
test <- matrix(c(1:18), 6, 3, byrow = FALSE)
>test
[,1] [,2] [,3]
[1,] 1 7 13
[2,] 2 8 14
[3,] 3 9 15
[4,] 4 10 16
[5,] 5 11 17
[6,] 6 12 18
dim(test) <- c(3,6)
>test
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 4 7 10 13 16
[2,] 2 5 8 11 14 17
[3,] 3 6 9 12 15 18
```
我正在寻找的输出是:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 7 13 4 10 16
[2,] 2 8 14 5 11 17
[3,] 3 9 15 6 12 18
解决方案
我们可以创建一个分组变量来拆分行序列,对矩阵进行子集化,然后cbind
do.call(cbind, lapply(split(seq_len(nrow(test)),
as.integer(gl(nrow(test), 3, nrow(test)))), function(i) test[i,]))
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 7 13 4 10 16
#[2,] 2 8 14 5 11 17
#[3,] 3 9 15 6 12 18
推荐阅读
- java - 条码扫描器 zxing 在启动时崩溃
- python - 如何在某些索引处显示包含某些元素的列表?
- sql - 在 TOAD 数据点中将两行分组为一
- python - PyQt5 - 插槽不接受信号回调的参数
- r - 使用collapse_row和kable时如何解决pdf文档中长表的对齐/显示问题?
- python - 如何使用 python 从我的 CSV 中捕获打印数据
- python - 使用 psycopg2 和 pandas 处理错误查询产生的错误
- android - 如果从不可暂停的块中调用,Android 协程范围会丢失
- php - 使用查询mysql php插入多个数据
- python - 尝试将数据从excel文件导入RDS MySQL表,插入时间过长