在R中使用Raster包聚合季节平均值

3

我想使用 R 中的 raster 包将每日数据(35 年)聚合到月份,然后计算季节平均值(我知道如何使用 CDO)。以下是我的代码,它输出了所有年份的四个季节平均值(140 层)。如何循环输出仅包含四个季节的 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)  

可能是将每日数据聚合到月/年间隔的重复问题。 - ClimateUnboxed
1个回答

3
你想要按年份和月份的组合进行聚合。
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

它可以工作,你有计算JF、MAM、JJAS和OND季节平均值的建议吗? - Fredrick
但这会给出季节中每日的平均值,而不是季节的月平均值?还是我错过了什么?.. - Fredrick
我已经编辑了代码,我从月度数据开始聚合季节平均值,但我只能输出140层..如何总结4层?.. - Fredrick
如果您使用 groups(dates),则无需进行第一步:您可以直接将日期映射到 JF 等。 - Enrico Schumann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接