Данные вашего примера
library(raster)
r <- raster(ncol=10, nrow=10)
b <- brick(sapply(1:408, function(i) setValues(r, rnorm(ncell(r), i, 3))))
dates <- seq(as.Date("1982-01-01"), as.Date("2015-12-31"), by="month")
Как указывает Маджид, если вы хотите группировать по годам, вам нужно использовать эти
years <- as.integer(format(dates, "%Y"))
months <- as.integer(format(dates, "%m"))
Теперь нужно сгруппировать месяцы. Обратите внимание, что начиная с декабря, вы должны убедиться, что не объединяете январь и декабрь одного и того же года. Скорее вы хотите объединить декабрь года i с январем и февралем года i + 1 . Вот один из способов сделать это (начать год в декабре!)
n <- length(months)
# move all months back one month
mnt <- c(months[-1], ifelse(months[n] < 12, months[n]+1, 1))
# move the years along
yrs <- c(years[-1], ifelse(months[n] < 12, years[n], years[n]+1))
# group by trimesters using integer division (or do: floor((mnt-1) / 3))
trims <- (mnt-1) %/% 3
# get names instead of 0, 1, 2, 3
trimnms <- c("DJF", "MAM", "JJA", "SON")[trims + 1]
Объединить годы и имена
yt <- paste(yrs, trimnms, sep="_")
Использовать индекс
s <- stackApply(b, indices=yt, fun=mean, na.rm=TRUE)
Если вышеописанный процесс перемещения месяцев назад затруднен, попробуйте сделать это с помощью нескольких дат (первые 15 или около того)