例如,我有一个矩阵:
[,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
感谢。
答案 0 :(得分:1)
让我扩展一下李哲元的答案,因为对于外行来说,这些事情可能有点神秘。基本上,用于从向量创建矩阵的相同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)