使用 R 估计 NetCDF 数据的每月气候学

     2023-03-24     194

关键词:

【中文标题】使用 R 估计 NetCDF 数据的每月气候学【英文标题】:Estimating monthly climatology on NetCDF data using R 【发布时间】:2019-07-16 05:20:00 【问题描述】:

我正在研究 31 年的 NOAA AVHRR 每日海面温度 (SST) 数据。数据采用 NetCDF 格式,尺寸为 28(经度)x 40(纬度)x 11686(天)。我应该计算每月的气候平均值(例如 31 年所有一月的平均值等)。使用 ncdf4 和 chron 库,我能够以数组形式获得它。

ncin <- nc_open('sstfile.nc')
sst_array <- ncvar_get(ncin, 'sst')

由于时间变量与 SST 数据是分开的,我不得不在数组上循环使用它。

is.leapyear <- function(year)
return(((year %% 4 == 0) & (year %% 100 != 0)) | (year %% 400 == 0))


dateseq <- seq(as.Date("1987-01-01"), as.Date("2018-12-31"), by=1)

使用栅格库我正在转换为栅格,然后进行计算。

for ( i in seq(11686)) 
dtft <- strsplit(as.character(as.Date(dateseq[i])), split = '-')
y <-  as.integer(dtft[[1]][1])
m <-  as.integer(dtft[[1]][2])
d <-  as.integer(dtft[[1]][3])
while (m == 1)
assign(paste0('r',y,'.',d), raster(matrix(sst_array[1:27, 1:38, i], 
nrow = 27, ncol = 38)))
m = m + 1

if (is.leapyear(y) == TRUE) (i = i + 366)
else (i = i + 365)

问题是它创建了太多的栅格,首先计算月平均值,然后计算年平均值。

r87jan <- stack(mget(paste0('r1987.',1:31)))
r87janmean <- calc(r87jan, mean)

是否有任何函数/方法可以在这段时间内进行计算而无需制作如此多的栅格并且计算可以保留为数组或矩阵?或者可以改进上面的代码来一次计算所有年份的月平均值吗?

【问题讨论】:

【参考方案1】:

如果我可以提供不在 R 中的答案,如果您安装了 cdo(安装了气候数据操作员),您可以简单地在 linux 命令行上执行此操作:

cdo ymonmean sstfile.nc sst_climate.nc 

文件 sst_climate.nc 将包含 12 个时间步长,所有 1 月、2 月等的平均值...

您可以使用

轻松地在 ubuntu/mint 中安装 cdo
sudo apt-get install cdo 

现在您还可以在 Windows 10 中轻松安装 ubuntu 以轻松访问这些有用的工具。此处提供文档https://code.mpimet.mpg.de/projects/cdo/

【讨论】:

【参考方案2】:

您不提供数据,但我认为您可以这样做:

library(raster)
nc <- brick('sstfile.nc')

dates <- getZ(nc)
months <-  as.integer(format(dates, "%m"))

s <- stackApply(nc, months, fun=mean)

【讨论】:

如何将信息附加到 R 中 netCDF 文件中的数组

...伏了很长时间后第一次在***上发帖,所以请温柔:)我正在使用R语言处理一个大型气候数据集,该数据集分布在许多文件中,一次对这些文件执行一个分析。每个文件都有完全相同的数据,只是在不同的时间(每个文件大约6个月... 查看详情

在 R 中创建多维 NetCDF

...【发布时间】:2012-05-2108:47:33【问题描述】:我正在尝试使用R包ncdf创建多维NetCDF文件。我正在对一组1500个点进行气候日常观测,每个点的观测数约为18250。问题是NetCDF文件的结构(create.ncdf)占用4Gb,每个点使文件大小增加3Gb... 查看详情

从paleoView导入R中的netcdf时只有正纬度和经度可能是错误的投影

...ngprojection【发布时间】:2019-01-2620:13:57【问题描述】:我使用paleoview软件从过去的气候中下载了一些变量,包括15000BP-10000BP的平均温度( 查看详情

如何在 R 中使用 netcdf 数据进行 PCA

】如何在R中使用netcdf数据进行PCA【英文标题】:HowtodoaPCAwithnetcdfdatainR【发布时间】:2014-10-1614:52:25【问题描述】:我在R中有以下netcdf文件:"fileoceandata.nchas2dimensions:""lonSize:2160""latSize:900""------------------------""fileoceandata.nchas14variab... 查看详情

在 R 中构建气候数据

...616:24:57【问题描述】:我对编程非常陌生,最近开始尝试使用R进行数据分析。我目前正在尝试根据另一列的值在我的df上生成一个新列,并将每个列的降雨总量相加。我从PRISM气候组网站获得了我的气候数据,并添加了以下代码... 查看详情

使用 R 扩展 netCDF 文件中的尺寸

】使用R扩展netCDF文件中的尺寸【英文标题】:ExtenddimensionsinnetCDFfileusingR【发布时间】:2015-07-1700:48:59【问题描述】:我想使用R编写一个具有“无限”维度的netCDF文件,以后可以扩展。这是我尝试过的:创建netcdf文件library(ncdf4)#... 查看详情

将多个netcdf合并到一个文件中,每个文件的平均值都为平均值(代码片段)

...年之间每月平均每日温度范围(dtr)的数据。一个文件的使用期限为10年,因此每个像素具有10x12的值(每月1个值x10年)。可以下载文件here(需要登录)。我想将所有这些文件合并为一个文件,其中包含3个文件所覆盖的整个期... 查看详情

如何找到不包括零的netCDF数组的最小值

...ngzero【发布时间】:2015-08-0118:25:59【问题描述】:我正在使用Python2,并处理netcdf数据。这个数组是一个叫做云水混合比的变量,它是WRF气候模型的输出,有4个维度:QC(time(25),verticallevel(69),latitude(119),lon 查看详情

使用 cartopy 绘制来自 netcdf 文件的 4 维变量的数据

】使用cartopy绘制来自netcdf文件的4维变量的数据【英文标题】:plottingdatafroma4-dimensionalvariablefromanetcdffilewithcartopy【发布时间】:2021-05-2813:46:49【问题描述】:我想知道如何在地图上绘制带有cartopy的NetCDF文件的变量“r”(相对湿... 查看详情

从 R 中的 netCDF 提取点的时间序列(lon,lat)

...文件是here和here是小文件。我已经尝试过netCDF包和我目前使用的代码library(ncdf)ob 查看详情

如何使用 R 中的纬度/经度边界从 netCDF 文件中获取子集

】如何使用R中的纬度/经度边界从netCDF文件中获取子集【英文标题】:HowtotakeasubsetfromanetCDFfileusinglatitude/longitudeboundariesinR【发布时间】:2014-02-1208:15:38【问题描述】:我有一个netCDF文件,我希望使用R中的“ncdf”包从定义的纬度/... 查看详情

使用 r 包在地图上绘制 netcdf 变量轮廓的简单方法

】使用r包在地图上绘制netcdf变量轮廓的简单方法【英文标题】:Simplewaytocontournetcdfvariablesonamapusingrpackage【发布时间】:2015-09-2322:55:55【问题描述】:我必须使用R包绘制地图,以便绘制国家/地区限制,以及从NetCDF文件读取的气... 查看详情

使用 NetCDF 的 R CMD SHLIB Fortran 90 文件

】使用NetCDF的RCMDSHLIBFortran90文件【英文标题】:RCMDSHLIBFortran90filewhichuseNetCDF【发布时间】:2020-08-0704:24:37【问题描述】:我想编译一个使用NetCDF的fortran90文件。我已经安装了NetCDF-Fortran,如图here,编译文件test_nc.f90:programtest_ncus... 查看详情

使用 R 的 netcdf 栅格堆栈或栅格砖的时间和地理子集

】使用R的netcdf栅格堆栈或栅格砖的时间和地理子集【英文标题】:timeandgeographicalsubsetofnetcdfrasterstackorrasterbrickusingR【发布时间】:2018-06-0906:12:06【问题描述】:对于以下包含2016年每日全球海面温度的netcdf文件,我尝试(i)时间上... 查看详情

从 NetCDF 中提取数据

....gov/l3/下载了一月份的海面温度并将其导入R。我知道如何使用extent(ymax,ymin,xmax,xmin)进行裁剪,但我不知道如何仅针对一个站点(53.9S,174,1W)或最接近该坐标的站点进行裁剪。有没 查看详情

如何使用 R 将我的每日日期列分组为每月日期?

】如何使用R将我的每日日期列分组为每月日期?【英文标题】:HowcanIgroupmydailydatecolumnintomonthlydatewithR?【发布时间】:2021-01-2621:59:52【问题描述】:我有一个名为Police_notifications的数据框,这就是它的样子。datum106-03-201911:34:57206-... 查看详情

绘制 NetCDF 的部分并覆盖形状文件-R

...球性的形象,我只想要其中的一部分,即只有墨西哥。我使用Thistutorial来绘制所有内容并且效果很好。但是我应该在哪个部分裁剪地图。这是我的代码:require(u 查看详情

循环遍历 netcdf 文件并运行计算 - Python 或 R

...发布时间】:2013-09-1023:38:26【问题描述】:这是我第一次使用netCDF,我正在努力使用它。我有多个版本3netcdf文件(NOAANARRair.2m全年平均每天)。每个文件跨越1979年至2012年之间的一年。它们是349x277网格,分辨率约为3 查看详情