R 按行重塑矩阵
我有一个18000 x 54的矩阵。我想把它重塑成一个54000 x 18大小的矩阵,在这个矩阵中,我的初始矩阵的每一行变成一个有3行的矩阵 让我们举个例子。我有一个矩阵如下:R 按行重塑矩阵,r,matrix,R,Matrix,我有一个18000 x 54的矩阵。我想把它重塑成一个54000 x 18大小的矩阵,在这个矩阵中,我的初始矩阵的每一行变成一个有3行的矩阵 让我们举个例子。我有一个矩阵如下: a = matrix(1:18, nrow = 2, ncol = 9, byrow = T) a [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] 1 2 3 4 5 6 7 8 9 10 11 12 13
a = matrix(1:18, nrow = 2, ncol = 9, byrow = T)
a
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
我想重塑该矩阵,使其成为:
[,1] [,2] [,3]
1 4 7
2 5 8
3 6 9
10 13 16
11 14 17
12 15 18
我尝试了以下两种方法,但都不起作用。第一个是:
dim(a) = c(6,3)
第二个是创建一个函数,然后应用于每一行:
reshapeX = function(x){
dim(x) = c(3,as.integer(length(x)/3))
return(as.matrix(x))
}
rbind(apply(a, 1, reshapeX))
但它也不起作用。有人能帮忙吗?一个选项是
out <- sapply(split.default(as.data.frame(a), as.integer(gl(ncol(a), 3,
ncol(a)))), function(x) c(t(x)))
colnames(out) <- NULL
out
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#[4,] 10 13 16
#[5,] 11 14 17
#[6,] 12 15 18
或者,这可以通过
数组
apply(array(c(t(a)), c(3, 3, 2)), 2, c)
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#[4,] 10 13 16
#[5,] 11 14 17
#[6,] 12 15 18
你可以做:
do.call(rbind, lapply(1:nrow(a), function(i) matrix(a[i, ], nrow=3)))
使用您的数据:
a <- matrix(1:18, nrow = 2, ncol = 9, byrow = TRUE)
do.call(rbind, lapply(1:nrow(a), function(i) matrix(a[i, ], nrow=3)))
# [,1] [,2] [,3]
# [1,] 1 4 7
# [2,] 2 5 8
# [3,] 3 6 9
# [4,] 10 13 16
# [5,] 11 14 17
# [6,] 12 15 18
a这里有一个无循环的方法
m1 <- matrix(c(a), ncol = 3, nrow = 6)
rbind(m1[c(TRUE, FALSE),], m1[c(FALSE, TRUE),])
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#[4,] 10 13 16
#[5,] 11 14 17
#[6,] 12 15 18
m1
m1 <- matrix(c(a), ncol = 3, nrow = 6)
rbind(m1[c(TRUE, FALSE),], m1[c(FALSE, TRUE),])
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#[4,] 10 13 16
#[5,] 11 14 17
#[6,] 12 15 18