R:3-dim矩阵中每N值的平均值

时间:2017-07-25 17:24:38

标签: r matrix

我有一个矩阵A,包含每小时数据(按月计算)和昏暗[116 152 744] 我正在尝试使用每日数据创建矩阵B并且暗淡[116 152 31] 显然,B中每个暗淡的TSTEP都是矩阵A中前24个TSTEPS的平均值。

我成功创建了一个带有月度数据的矩阵C,并带有一个简单的应用

C <- apply(A, c(1,2), function (x) mean(x))

但不能完全弄清楚每个N值的平均值。谢谢。

2 个答案:

答案 0 :(得分:1)

只取一个向量,得到每24个值的平均值,你可以这样做:

mean24 <- function(x) {
  dim(x) <- c(24, length(x) / 24)
  colMeans(x)
}

x <- 1:48
mean24(x)
[1] 12.5 36.5

所以,在你的情况下,你只需要这样做:

apply(A, c(1, 2), mean24)

答案 1 :(得分:0)

你也可以使用sapply和一些索引:

# create data

arr <- array(dim=c(116,152,744))
arr[] <- runif(length(arr[]))

daily <-sapply(seq(1,744,24),function(ix){
                             rowMeans(arr[,,ix:(ix+23)],dims = 2)
                             },simplify = 'array')


> str(daily)
 num [1:116, 1:152, 1:31] 0.451 0.522 0.407 0.536 0.432 ...

编辑:

与其他解决方案(微基准测试)相比,它也相当快:

Unit: milliseconds
                        expr      min       lq     mean   median      uq      max neval
 apply(arr, c(1, 2), mean24) 464.4121 509.9772 653.9486 667.2114 699.498 1221.733   100
Unit: milliseconds
                                                                                                        expr
 sapply(seq(1, 744, 24), function(ix) {     rowMeans(arr[, , ix:(ix + 23)], dims = 2) }, simplify = "array")
      min       lq     mean   median       uq      max neval
 164.8211 168.3295 189.8147 171.4008 196.2403 409.9638   100