读取多个ncdf文件并在R中求平均值



通过使用R,我将尝试打开包含15个变量的5维空间的NetCDF数据(计算变量在矩阵1000X920中)

这个问题实际上和之前的另一个问题看起来是一样的。

我从这里和其他那里得到了解释

一开始我使用RNetCDF软件包,但经过一段时间的试用,当软件包读取我的数据时,我发现不符合要求。最后使用ncdf包后效果更好。

在单个文件中打开数据是没有问题的,但在一个特殊变量(例如:var no 15)的文件夹中循环了一百多个数据后,程序失败了。

>  days = formatC(001:004, width=3, flag="0") 
>  ncfiles = lapply (days,
> function(d){  filename = paste("data",d,".nc",sep="")
>       open.ncdf(filename) })

当我为特殊变量尝试这样的命令时

> sapply(ncfiles,function(file,{get.var.ncdf(file,"var15")})

所以我的问题是,任何读取带有特殊变量的所有netcdf文件然后在一帧中进行计算的解决方案。根据之前的解决方案,我无法在整个netcdf数据上生成变量no15。

感谢你为这个问题提供的任何解决方案。

更新:

这是我最后一次做

当我写时

    library(ncdf)
files=list.files("allnc/",pattern='*nc',full.names=TRUE)
for(i in seq_along(files)) {
nc <- lapply(files[i],open.ncdf)
lw = get.var.ncdf(nc,"var15")
x=dim(lw)

rbind(df,data.frame(lw))->df}

我可以通过>nc 获取所有netcdf数据

因此,我如何自动获得具有新名称的变量数据,如lw1、lw2…等我不能申请

var1 <- lapply(files, FUN = get.var.ncdf, variable = "var15")

然后我可以用所有的数据进行计算。

我尝试的另一种技术是使用RNetCDF包n进行循环

# Declare data frame
df=NULL
#Open all files
files= list.files("allnc/",pattern='*.nc',full.names=TRUE)
# Loop over files
for(i in seq_along(files)) {
nc = open.nc(files[i])
# Read the whole nc file and read the length of the varying dimension (here, the 3rd dimension, specifically time)
lw = var.get.nc(nc,'DBZH')
x=dim(lw)
# Vary the time dimension for each file as required
lw = var.get.nc(nc,'var15')
# Add the values from each file to a single data.frame
}

我可以获取一个变量数据,但我只从我的全文件nc中获得了一个数据。注意:我的数据名称示例(data2015012001.nc,data2015012002.nc…..等)

此解决方案使用NCO,而不是R。您可以使用它来检查您的R解决方案:

ncra -v var15 data20150102*.nc out.nc

仅此而已。NCO用户指南中的完整文档。

您可以使用CDO的集成统计功能,但请注意,在某些系统上,文件数量限制为256:

cdo ensmean data20150102*.nc ensmean.nc

您可以将"mean"替换为您选择的统计数据,max、std、var、min等。

最新更新