如何在 R 中展开矩阵

how unroll a matrix in R

比如我有一个矩阵:

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
[4,]   13   14   15   16

我想让它变成

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    2    3    4    5    6    7    8
[2,]    9   10   11   12   13   14   15   16

谢谢。

让我扩展一下李哲元的回答,因为这些事情对于外行来说可能有点神秘。基本上,用于从向量创建矩阵的相同 matrix 函数也可用于重塑矩阵。

大家需要了解的是,矩阵很像向量,但其形状具有 $dim 属性,并且该基础向量的值按列存储。

要创建原始矩阵,您可以这样做:

A <- matrix(1:16, nrow=4, byrow=TRUE)
print(attributes(A))

byrow 参数告诉 matrix 以行方式而不是列方式将输入向量的元素分配给矩阵。 但是,这并没有改变这样一个事实,即经过这次分配后,矩阵内部仍然是按列存储值。 byrow 参数只是简单地改变了底层向量中元素的顺序,很容易看出:

print(as.numeric(A))

我们需要得到你想要的输出,首先是在你的矩阵中得到按列排序的序列——这样底层向量又是1:16。为此,我们可以使用转置函数 t()。转置之后,我们可以将现在排序良好的值以行方式放入所需的 2x8 形状中。所以:

B <- matrix(t(A), nrow=2, byrow=TRUE)
print(B)