根据行创建新列

use*_*123 2 r

如果我有一个矩阵像:

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

akr*_*run 7

我们创建一个分组变量?gl和使用参数n=nrow(m1),k=2length=nrow(m1).我们split矩阵('m1')unlist,并创建一个新matrixnrow=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)