我有一个数组a
dim (a)
[1] 126 59 240
我想每12步计算一次三维的平均值。 我尝试过:
rollapply(a,3,mean,by=12 )
但是结果是一个长度为11且长度不超过向量的向量。
apply
和特定功能更好吗?
我的预期结果是使用dim 126 59 20
答案 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