1

例如,我有一个矩阵:

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

谢谢。

4

1 回答 1

2

让我扩展李哲元的答案,因为这些事情对于外行来说可能有点神秘。基本上,用于从向量创建矩阵的相同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)
于 2016-12-12T09:16:55.793 回答