我有一个问题的解决方案,它不是很优雅,也不是可扩展的我想要一些帮助。
我有一个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)
我如何以原始矩阵结束可能是我的问题的原因,但我已经走了一段轨道并希望整理这个问题。
答案 0 :(得分:3)
您可以通过构建指标的向量来单独使用矩阵子集。
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
答案 1 :(得分:2)
您可以将m
划分为矩阵列表,然后使用rbind
将它们do.call
放在一起。例如,
dim(do.call(rbind, lapply(split(1:ncol(m), ceiling(1:ncol(m)/5)), function(i) m[,i])))
#[1] 300 5
OR
dim(do.call(rbind, lapply(seq(1, ncol(m), 5), function(i) m[,i:(i+4)])))
#[1] 300 5