从3D数组列表中计算均值和分位数

时间:2019-02-14 21:48:24

标签: arrays r 3d mean quantile

我想计算3d数组列表的均值和分位数,同时跳过NA值。

我已经尝试过此解决方案,Mean of a list of 3D arrays in R,但我不知道如何计算分位数或应用na操作。

x <- array(1:24, dim = 2:4)
y <- array(24:49, dim = 2:4)
z <- array(50:74, dim = 2:4)

x[1,1,1] <- NA

myL <- list(x,y,z)
Reduce('+', myL) / length (myL)

实际:

 , , 1

 [,1] [,2] [,3]
 [1,]   NA   27   29
 [2,]   26   28   30

 , , 2

 [,1] [,2] [,3]
 [1,]   31   33   35
 [2,]   32   34   36

  , , 3

 [,1] [,2] [,3]
 [1,]   37   39   41
 [2,]   38   40   42

  , , 4

 [,1] [,2] [,3]
 [1,]   43   45   47
 [2,]   44   46   48

所需:

 , , 1
 [,1] [,2] [,3]
 [1,]   24   27   29
 [2,]   26   28   30

  , , 2

 [,1] [,2] [,3]
 [1,]   31   33   35
 [2,]   32   34   36

  , , 3

 [,1] [,2] [,3]
 [1,]   37   39   41
 [2,]   38   40   42

  , , 4

 [,1] [,2] [,3]
 [1,]   43   45   47
 [2,]   44   46   48

还有分位数方法。谢谢。

更新:

我已经尝试过了:

 a <- array(unlist(myL), dim = c(dim(myL[[1]]), length(myL)))
 a.mean <- apply(a, 1:3, mean, na.rm=T)
 a.quantile <- apply(a, 1:3, quantile, 0.95 na.rm=T)

但这在我的数组上非常慢([162,200,2190,3])。

更新2:

好的,这适用于均值计算:

 rowMeans(do.call(cbind, myL), na.rm = TRUE)

但是,我不知道如何针对分位数执行此操作。

0 个答案:

没有答案