R 中 netCDF 文件的月平均值

Job*_*o90 4 r netcdf4

我有一个 netCDF 文件 (.nc),其中包含 16 年(1998 - 2014)的每日降水量(5844 层)。3 个维度是时间(大小 5844)、纬度(大小 19)和经度(大小 20) R 中是否有一种简单的方法来计算每个栅格单元:

  • 月平均和年平均
  • 累积比较(例如,一月至三月与所有一月至三月的平均值进行比较)

到目前为止我有:

library(ncdf4)
library(raster)

Rname <- 'F:/extracted_rain.nc'
rainfall <- nc_open(Rname)
readRainfall <- ncvar_get(rainfall, "rain") #"rain" is float name
raster_rainfall <- raster(Rname, varname = "rain") # also tried brick()
asdatadates <- as.Date(rainfall$dim$time$vals/24, origin='1998-01-01') #The time interval is per 24 hours
Run Code Online (Sandbox Code Playgroud)

我的第一个挑战是计算每个栅格单元的月平均值。我不确定如何在牢记最终目标(累积比较)的同时最好地进行。如何轻松访问特定月份中的几天?

raster(readRainfall[,,500])) # doesn't seem like a straightforward approach
Run Code Online (Sandbox Code Playgroud)

希望我清楚地表达了我的问题,如果能朝着正确的方向迈出第一步,我们将不胜感激。样本数据在这里

Adr*_*ins 5

该问题要求在 R 中提供解决方案,但如果有人想要完成此任务并想要一个简单的替代命令行解决方案,这些统计数据就是 CDO 的面包和黄油

每月平均值:

cdo monmean in.nc monmean.nc
Run Code Online (Sandbox Code Playgroud)

年平均值:

cdo yearmean in.nc yearmean.nc
Run Code Online (Sandbox Code Playgroud)

计算所有一月、二月等的平均值:

cdo ymonmean in.nc ymonmean.nc
Run Code Online (Sandbox Code Playgroud)

相对于长期年周期的月异常:

cdo sub monmean.nc ymonmean.nc monanom.nc
Run Code Online (Sandbox Code Playgroud)

然后你想要一个特定的月份,只需选择 selmon 或 seldate 即可。

您可以使用系统命令从 R 调用这些函数。