我是新的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)作为文件名的一部分,然后循环整个月。
答案 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;我认为它应该仍然有效,因为文件将按时间顺序列出。