如何在R中展开矩阵

时间:2016-12-12 06:15:25

标签: r matrix unroll

例如,我有一个矩阵:

     [,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

感谢。

1 个答案:

答案 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)