批量读取netcdf文件和平均一个变量

时间:2013-04-11 18:20:34

标签: r variables netcdf

我是新的R用户。我现在有1979年的每日netcdf数据,例如: sm19790101.1.nc
sm19790102.1.nc



sm19791231.1.nc

我需要将一个名为“sm”的变量平均为每月分辨率。我现在可以这样做:

glob2rx("sm197901*.1.nc")  
jan<-list.files(pattern=glob2rx("sm197901*.1.nc"),full.names=TRUE)

将所有1月份数据移植到jan,但我不知道如何打开每个文件并获取特定变量(我已经安装了Rnetcdf包)。如果我要手动执行此操作,则应该是:

s19790101<-open.nc("sm19790101.1.nc")  
sm19790101<-var.get.nc(s19790101,"sm",na.mode=0)  

然后平均他们......

我想问题是如何读取带有变量的文件(例如01-31)作为文件名的一部分,然后循环整个月。

3 个答案:

答案 0 :(得分:2)

如果要汇总大量数据,可以使用NetCDF操作员工具http://nco.sourceforge.net/nco.html#ncra-netCDF-Record-Averager

将每日数据汇总为每月数据。
ncra DAILY/sm197901[*].1.nc MONTHLY/sm197901.1.nc

答案 1 :(得分:0)

看起来您可以将文件名组件“sm197901”,日,“.1.nc”粘贴在一起构建所需的文件名。

#make sure it has a leading 0
days = formatC(1:31, width=2, flag="0")
ncfiles = lapply(days, function(d){
    filename = paste("sm197901", d, ".1.nc", sep="")
    #print(filename)
    open.nc(filename)
})

答案 2 :(得分:0)

与Dave的答案相似,你也可以用cdo

来做
cdo mergetime sm1979????.1.nc year.nc
# you only need this next step if there is more than one variable in the file:
cdo selvar,sm year.nc yearsm.nc  
cdo monmean year.nc month.nc

在某些系统上,打开文件的数量限制为256 - 如果是这种情况,您可以替换&#34; mergetime&#34;用&#34; cat&#34;我认为它应该仍然有效,因为文件将按时间顺序列出。