我有一个矩阵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值的平均值。谢谢。
答案 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