如果我有一个矩阵像:
[,1] [,2]
[1,] 1 7
[2,] 2 8
[3,] 3 9
[4,] 4 10
[5,] 5 11
[6,] 6 12
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何从上面创建一个新的矩阵,如下所示:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 7 3 9 5 11
[2,] 2 8 4 10 6 12
Run Code Online (Sandbox Code Playgroud)
我们创建一个分组变量?gl和使用参数n=nrow(m1),k=2和length=nrow(m1).我们split矩阵('m1')unlist,并创建一个新matrix的nrow=2.
matrix(unlist(split(m1,as.numeric(gl(nrow(m1), 2, nrow(m1))))),nrow=2)
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 7 3 9 5 11
#[2,] 2 8 4 10 6 12
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是array通过指定尺寸进行转换.在这里我使用,c(2, 2, 3)因为我们可以获得前两个维度的2x2矩阵,第三个基于nrow(m1)/2.然后,我们可以置换arrayusing aperm,concatenate(c)的维度以形成a vector并转换为matrix.
matrix(c(aperm(array(t(m1), c(2, 2,3)),c(2,1,3))), nrow=2)
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 7 3 9 5 11
#[2,] 2 8 4 10 6 12
Run Code Online (Sandbox Code Playgroud)
m1 <- structure(1:12, .Dim = c(6L, 2L))
Run Code Online (Sandbox Code Playgroud)