首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按组划分的平均数组元素

按组划分的平均数组元素
EN

Stack Overflow用户
提问于 2014-03-12 23:34:27
回答 2查看 79关注 0票数 1

我想在一组表格或页面之间的三维数组中对元素进行平均化(我的名字是第三维度)。

下面是一个名为my.array的示例数组。在本例中,我希望在3张给出desired.result的组中平均元素。我的实际数据在一个数组中,有几十张床单。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

这段代码非常接近:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
t(sapply(seq(1,2), function(i) {apply( my.array[,,(3*(i-1)+1):(3*i)], c(1,2), mean)}))

         [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]    [,10]    [,11]    [,12]    [,13]    [,14]    [,15]    [,16]
[1,] 37.00000 37.00000 111.0000 111.0000 37.00000 37.00000 111.0000 111.0000 74.00000 74.00000 148.0000 148.0000 74.00000 74.00000 148.0000 148.0000
[2,] 62.33333 62.33333 130.3333 130.3333 62.33333 62.33333 130.3333 130.3333 96.33333 96.33333 164.3333 164.3333 96.33333 96.33333 164.3333 164.3333

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-13 00:05:37

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> 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))
票数 1
EN

Stack Overflow用户

发布于 2014-03-12 23:47:04

一种可能性是使用一个因素来识别"sheets“组,并使用abind包中的abind字体:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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))

HTH

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22371988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文