Arrays 按组平均数组元素数

Arrays 按组平均数组元素数,arrays,r,apply,Arrays,R,Apply,我想在一组图纸或页面中平均三维数组中的元素(我的名字是第三维) 下面是一个名为my.array的示例数组。在本例中,我希望对3张图纸中的元素进行平均,得到所需的结果。我的实际数据是一个由几十张纸组成的数组 我怀疑有一个类似于apply的函数可以进行平均。但是,我不熟悉在阵列上使用这些函数。谢谢你的建议 i <- 4 j <- 4 k <- 6 my.array <- array(0, c(i,j,k)) my.array[1:2,1:2,1] <- 1 my

我想在一组图纸或页面中平均三维数组中的元素(我的名字是第三维)

下面是一个名为
my.array
的示例数组。在本例中,我希望对3张图纸中的元素进行平均,得到所需的
结果。我的实际数据是一个由几十张纸组成的数组

我怀疑有一个类似于
apply
的函数可以进行平均。但是,我不熟悉在阵列上使用这些函数。谢谢你的建议

i <- 4
j <- 4
k <- 6

my.array <- array(0, c(i,j,k))

my.array[1:2,1:2,1] <-   1
my.array[1:2,3:4,1] <-   2
my.array[3:4,1:2,1] <-   3
my.array[3:4,3:4,1] <-   4
my.array[1:2,1:2,2] <-  10
my.array[1:2,3:4,2] <-  20
my.array[3:4,1:2,2] <-  30
my.array[3:4,3:4,2] <-  40
my.array[1:2,1:2,3] <- 100
my.array[1:2,3:4,3] <- 200
my.array[3:4,1:2,3] <- 300
my.array[3:4,3:4,3] <- 400

my.array[1:2,1:2,4] <-  -4
my.array[1:2,3:4,4] <-  -3
my.array[3:4,1:2,4] <-  -2
my.array[3:4,3:4,4] <-  -1
my.array[1:2,1:2,5] <-  80
my.array[1:2,3:4,5] <-  70
my.array[3:4,1:2,5] <-  60
my.array[3:4,3:4,5] <-  50
my.array[1:2,1:2,6] <- 111
my.array[1:2,3:4,6] <- 222
my.array[3:4,1:2,6] <- 333
my.array[3:4,3:4,6] <- 444

desired.result <- array(0, c(i,j,k/3))

desired.result[1:2,1:2,1] <-  37        # 111 / 3
desired.result[1:2,3:4,1] <-  74        # 222 / 3
desired.result[3:4,1:2,1] <- 111        # 333 / 3
desired.result[3:4,3:4,1] <- 148        # 444 / 3
desired.result[1:2,1:2,2] <-  62.33333  # (111 +  80 + -4) / 3
desired.result[1:2,3:4,2] <-  96.33333  # (222 +  70 + -3) / 3
desired.result[3:4,1:2,2] <- 130.3333   # (333 +  60 + -2) / 3
desired.result[3:4,3:4,2] <- 164.3333   # (444 +  50 + -1) / 3

, , 1

     [,1] [,2] [,3] [,4]
[1,]   37   37   74   74
[2,]   37   37   74   74
[3,]  111  111  148  148
[4,]  111  111  148  148

, , 2

          [,1]      [,2]      [,3]      [,4]
[1,]  62.33333  62.33333  96.33333  96.33333
[2,]  62.33333  62.33333  96.33333  96.33333
[3,] 130.33330 130.33330 164.33330 164.33330
[4,] 130.33330 130.33330 164.33330 164.33330

我更喜欢基本R中的解决方案。

一种可能性是使用一个系数来识别“表”组,并使用包abind中的abind函数:

res <- tapply(1:(dim(my.array)[3]), gl(2,3), function(x) rowMeans(my.array[,,x], dim=2))
res <- do.call(abind, c(res, along=3))

res用所需数组包装
sapply
调用怎么样?它只使用基本R函数

> array(sapply(seq(1,2), function(i) {
      apply( my.array[,,(3*(i-1)+1):(3*i)], c(1,2), mean)
      }), c(i,j,k/3))
> array(sapply(seq(1,2), function(i) {
      apply( my.array[,,(3*(i-1)+1):(3*i)], c(1,2), mean)
      }), c(i,j,k/3))