在保留日期的情况下,在特定窗口内移动平均值,R

在保留日期的情况下,在特定窗口内移动平均值,R,r,date,moving-average,R,Date,Moving Average,我有一个50层的大光栅堆栈,我想用10个移动窗口计算平均值和最大值。例如,我想要计算层1:10和层11:20的平均值,以此类推(总共5个平均光栅)。同时,我希望根据我使用的函数(例如,具有最大值的光栅的日期或平均日期)保留图层的日期 到目前为止,我已经尝试了以下方法,但速度非常慢。 有人能帮助我更有效地做这件事吗 将s_all视为我的光栅堆栈: for(i in 1:5){ t[[i]]<-calc( s_all[[((i-1)*10 + 1):((i-1)*1

我有一个50层的大光栅堆栈,我想用10个移动窗口计算平均值和最大值。例如,我想要计算层1:10和层11:20的平均值,以此类推(总共5个平均光栅)。同时,我希望根据我使用的函数(例如,具有最大值的光栅的日期或平均日期)保留图层的日期

到目前为止,我已经尝试了以下方法,但速度非常慢。 有人能帮助我更有效地做这件事吗

s_all
视为我的光栅堆栈:

for(i in 1:5){
  t[[i]]<-calc(
            s_all[[((i-1)*10 + 1):((i-1)*10 + 10)]], 
            fun = mean, na.rm = T)
  t@z$Date[[i]]<-mean.Date(as.Date(
                              c(s_all@z$Date[[((i-1)*10 + 1)]],
                              s_all@z$Date[[((i-1)*10 + 10)]])))
}
for(1:5中的i){
t[[i]]你说你想要一个“移动平均值”,但这不是你所描述的(移动平均值将返回相同数量的层,带有局部平滑的值)。你所描述的是层的聚合,步长为10。你可以通过
stackApply
aggregate
获得

我更改了您的示例数据,使其值有一些变化,并且我不会随机化日期

library(raster)
r <- raster(ncol=10, nrow=10)
s <- stack(lapply(1:50, function(i) setValues(r, i)))
d <- seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day")[1:50]
s <- setZ(s, d, "Date")
假定聚合的层数是恒定的,您也可以使用
aggregate

sss <- aggregate(s, c(1,1,10), mean)

sss请使用
dput
提供示例数据。抱歉,我是新用户,我将尝试创建一个示例。
idx <- rep(1:5, each=10)
ss <- stackApply(s, idx, mean)
sss <- aggregate(s, c(1,1,10), mean)
newd <- tapply(getZ(s), idx, max)
newd <- as.Date(newd, origin="1970-01-01")
ss <- setZ(ss, newd, "Date")

ss
#class      : RasterBrick 
#dimensions : 10, 10, 100, 5  (nrow, ncol, ncell, nlayers)
#resolution : 36, 18  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#source     : memory
#names      : index_1, index_2, index_3, index_4, index_5 
#min values :     5.5,    15.5,    25.5,    35.5,    45.5 
#max values :     5.5,    15.5,    25.5,    35.5,    45.5 
#Date       : 1999-01-10, 1999-01-20, 1999-01-30, 1999-02-09, 1999-02-19