Вы говорите, что хотите «скользящее среднее», но это не то, что вы описываете (скользящее среднее будет возвращать то же количество слоев с локально сглаженными значениями). То, что вы описываете, представляет собой объединение слоев с шагом 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")
Для stackApply
нужен индекс:
idx <- rep(1:5, each=10)
ss <- stackApply(s, idx, mean)
Учитывая, что количество агрегированных слоев постоянно, вы также можете использовать aggregate
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