如何在 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)
比如我有一个矩阵:
[,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)