重新排列矩阵R的更好方法

时间:2018-01-18 19:42:16

标签: r matrix

我有一个问题的解决方案,它不是很优雅,也不是可扩展的我想要一些帮助。

我有一个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)

我如何以原始矩阵结束可能是我的问题的原因,但我已经走了一段轨道并希望整理这个问题。

2 个答案:

答案 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