r - 使用 r 中的栅格包聚合季节性方法

标签 r netcdf r-raster rgdal netcdf4

我正在尝试将每日数据(35 年)聚合到月度数据,然后使用 R 中的栅格包计算季节性平均值(我知道如何使用 CDO 进行计算)。下面是我的代码,它输出所有年份的 4 个季节性平均值(140 层)。我怎样才能循环只输出 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

关于r - 使用 r 中的栅格包聚合季节性方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738413/

相关文章:

R:识别相邻单元格的簇(0-1 值的二维矩阵中的连续区域)

mysql - 如何在将列导出到 MySQL 之前将 R 中的列转换为 BLOB

R 中的光栅包无法识别 .bil 文件

r - 在 ggplot2 中针对不同因素绘制两种颜色美学

r - 我们如何对 Shiny 的变量进行预处理步骤

linux - 对具有多个 netCDF 文件的目录同时执行 shell 和 cdo 操作

python - 使用 xarray 添加全局属性

r - 为什么 rasterToPoints 在第一次调用而不是第二次调用时生成错误?

r - 无法在 R 中打开 NetCDF 版本 4 文件

r - 如何规范化光栅堆栈?