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))