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

时间:2015-02-27 17:40:29

标签: r netcdf

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

此问题实际上与之前的其他问题相同。

我从hereothers

获得了解释

起初我使用的是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数据的变量no 15。

感谢您解决此问题。

更新:

这是我做的最后一次

当我写

    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)) - &GT; DF }

我可以通过&gt;获得所有netcdf数据NC

所以我如何自动获取新名称的可变数据,如lw1,lw2 ......等 我无法申请

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

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

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

# 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
}

我可以获取可变数据,但我只从我的所有文件中获取一个数据。 注意:我的数据名称的样品(data20150102001.nc,data20150102002.nc ..... etc)

2 个答案:

答案 0 :(得分:2)

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

ncra -v var15 data20150102*.nc out.nc

就是这样。 NCO User Guide中的完整文档。

答案 1 :(得分:0)

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

cdo ensmean data20150102*.nc ensmean.nc

你可以用你选择的统计数据替换“mean”,max,std,var,min等......