如何简单地折叠(求和)R中数组中的某些行

时间:2016-05-18 07:32:03

标签: arrays r

我想对数组中的几个特定行求和,而不是整个数组。

说我有一个数组

qq <- array(data = rep(1, 12), dim = c(3,2,2))

看起来像

    , , 1

     [,1] [,2]
[1,]    1    1
[2,]    1    1
[3,]    1    1

   , , 2

     [,1] [,2]
[1,]    1    1
[2,]    1    1
[3,]    1    1

我想将第2行和第3行相加以获得

, , 1

     [,1] [,2]
[1,]    1    1
[2,]    2    2

, , 2

     [,1] [,2]
[1,]    1    1
[2,]    2    2

我可以通过总结所需的行并将它们和旧行放在一个新的数组中来合理地轻松但不优雅地做到这一点,但这似乎是一种笨重的方式。 E.g:

qq23sum <- apply(X = qq[2:3,,], MARGIN = c(2,3), FUN = sum)

qw <- array(dim = c(2,2,2))

qw[1,,] <- qq[1,,]
qw[2,,] <- qq23sum

编辑:在回复评论时,我想要对数组中的任意行或其他维度求和,因此更复杂的示例可能是:

qq <- array(data = rep(1, 12000), dim = c(30, 20, 20))


qq23sum <- apply(X = qq[c(2, 3, 10, 11, 13),,], MARGIN = c(2,3), FUN = sum)

qw <- array(dim = c(26, 20,20))

然后更多的填充物将数组放入正确的位置......

我觉得那里有一个优雅的解决方案 - 任何人?

1 个答案:

答案 0 :(得分:1)

我们使用新维度初始化另一个数组,然后使用for循环

qq1 <- array(NA, c(2, 2, 3))
for(j in seq(dim(qq1))){
         qq1[,,j] <- rbind(qq[,,j][1,], colSums(qq[,,j][-1,]))
}


qq1
#, , 1
#
#     [,1] [,2]
#[1,]    1    1
#[2,]    2    2

#, , 2

#     [,1] [,2]
#[1,]    1    1
#[2,]    2    2

#, , 3

#     [,1] [,2]
#[1,]    1    1
#[2,]    2    2