三维数组中的每12步在三维数组中求平均值

时间:2019-05-14 10:07:08

标签: arrays r average

我有一个数组a

dim (a) 
[1] 126 59 240

我想每12步计算一次三维的平均值。 我尝试过:

rollapply(a,3,mean,by=12 )

但是结果是一个长度为11且长度不超过向量的向量。

apply和特定功能更好吗? 我的预期结果是使用dim 126 59 20

的新数组

1 个答案:

答案 0 :(得分:1)

绝对不简单,但是可以。

a = array(1:(126*59*240),c(126,59,240))          # Dummy data
s = seq(1,240,by=12)                             # Sequence of cutpoints for 3rd dim
aux =lapply(s,function(x){
  apply(a[,,x:(x+11)],c(1,2),mean,na.rm=TRUE)    # Get list with mean per each 12 3rd dim
})

aux2 = do.call(cbind,aux)                        # Bind all elements of list by column
Y = array(aux2,dim=c(dim(aux[[1]]),length(aux))) # Reconvert into array

> dim(Y)
[1] 126  59  20