我正在尝试将每日数据(35年)汇总到每月,然后使用R中的栅格数据包计算季节性平均值(我知道如何使用CDO)。下面是我的代码,它输出所有年份(140层)的4种季节性平均值。如何循环输出仅4层(4个季节)?我感谢您的帮助。

dailydata <- brick ("dailyrain.nc")
dates <- seq(as.Date("1981-01-01"), as.Date("2015-12-31"), by="day")
months <- format(dates, "%Y-%m")

Aggregate2Monthly <- function(x) {
  agg <- aggregate(x, by=list(months), sum)
  return(agg$x)
}
mothlydata <- calc(dailydata, Aggregate2Monthly)

mondates <- seq(as.Date("1981-01-01"), as.Date("2015-12-31"), by="month")
years <- format(mondates, "%Y")
seasons.def=c(1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4)
years.seasons <- paste(years, seasons.def, sep="-")

nyears <- years[!duplicated(years)]
nseas <- seasons.def[!duplicated(seasons.def)]

Aggregate2Seasons <- function(x) {
  agg <- aggregate(x, by=list(years.seasons), mean)
  return(agg$x)
}
seasonsdata <- calc(mothlydata, Aggregate2Seasons)

最佳答案

您想按年份和月份进行汇总。

months <- format(dates, "%Y-%m")

分组月份(根据您的评论):
groups <- function(x) {
    d <- as.POSIXlt(x)

    ans <- character(length(x))
    ans[d$mon %in%  0:1] <- "JF"
    ans[d$mon %in%  2:4] <- "MAM"
    ans[d$mon %in%  5:8] <- "JJAS"
    ans[d$mon %in% 9:11] <- "OND"
    ans
}

现在,使用groups(dates)作为分组变量。检查:
data.frame(dates, groups(dates))
##            dates groups.dates.
## 1     1981-01-01            JF
## 2     1981-01-02            JF
## 3     1981-01-03            JF
## 4     1981-01-04            JF
## 5     1981-01-05            JF
## 6     1981-01-06            JF

10-07 21:05