如果我有一个矩阵:
[,1] [,2]
[1,] 1 7
[2,] 2 8
[3,] 3 9
[4,] 4 10
[5,] 5 11
[6,] 6 12
有没有人知道如何从上面创建一个新的矩阵,如下所示:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 7 3 9 5 11
[2,] 2 8 4 10 6 12
答案 0 :(得分:7)
我们使用?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
或者其他选项是通过指定尺寸转换为array
。在这里,我使用了c(2, 2, 3)
,因为我们可以获得前两个维度的2x2矩阵,第三个矩阵基于nrow(m1)/2
。然后,我们可以使用array
置换aperm
的维度,连接(c
)以形成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
m1 <- structure(1:12, .Dim = c(6L, 2L))
答案 1 :(得分:2)
下面&#39;另一种选择:首先将矩阵转换为具有两行的矩阵,然后重新排列奇数和偶数列:
m3 <- m2 <- matrix(c(m),nrow = 2) #take data from original matrix, convert it into a matrix with two rows and store a copy in m2 and m3
m3[,seq(1,ncol(m2),2)] <- m2[,1:(ncol(m2)/2)] #define the odd-numbered columns of m3
m3[,seq(2,ncol(m2),2)] <- m2[,(ncol(m2)/2+1):ncol(m2)] # same for the even-numbered columns
> m3
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 7 3 9 5 11
#[2,] 2 8 4 10 6 12