我有一个我的问题的解决方案,它不是很优雅,也不是可伸缩的,我希望得到一些帮助。
我有一个50行30列的矩阵。我想把它改成5列300行。现在这应该很简单,但我必须将列6-10移到1-5下面,然后是11-15,依此类推。
fill <- rep(1:20)
m <- matrix(fill, nrow = 50, ncol = 30)
a <-m[,1:5]
b <-m[,6:10]
c <-m[,11:15]
d <-m[,16:20]
e <-m[,21:25]
f <-m[,26:30]
hope <- rbind(a,b,c,d,e,f)我如何结束与原始矩阵可能是我的问题的原因,但我已经走了一定的轨道,并希望整理这个问题。
发布于 2018-01-19 04:48:33
你可以通过构建一个索引向量,单独使用矩阵子集来完成这项工作。
x <- matrix(m[(1:50+250*rep(0:5,each=50))+50*rep(0:4,each=300)],ncol=5)
all.equal(x,hope)
[1] TRUE发布于 2018-01-19 04:35:43
您可以将m划分为一个矩阵列表,然后使用do.call将它们组合在一起。例如,
dim(do.call(rbind, lapply(split(1:ncol(m), ceiling(1:ncol(m)/5)), function(i) m[,i])))
#[1] 300 5或
dim(do.call(rbind, lapply(seq(1, ncol(m), 5), function(i) m[,i:(i+4)])))
#[1] 300 5https://stackoverflow.com/questions/48329126
复制相似问题