我有一个包含3维的netCDF文件。第一个维度是经度,从1-464到达。第二个维度是纬度,从1-201到达。第三个维度是时间,从1-5479到达。
现在我想从文件中提取某些值。我认为可以使用start参数来处理它。我试过这个命令。
test = open.ncdf("rr_0.25deg_reg_1980-1994_v8.0.nc")
data = get.var.ncdf(test,start=c(1:464,1:201,1:365))
但不知怎的,它不起作用。有人有解决方案吗?
提前致谢...
答案 0 :(得分:1)
看起来您正在使用R中的ncdf
包。如果可以,我建议使用更新的ncdf4
包,该包基于Unidata的netcdf第4版库(link)。
回到你的问题。我使用ncdf4
包,但我认为ncdf
包的工作方式相同。调用函数get.var.ncdf
时,还需要显式提供要提取的变量的名称。我想你可以使用names(test$var)
来获取变量的名称。
所以你需要做这样的事情:
# Open the nc file
test = open.ncdf("rr_0.25deg_reg_1980-1994_v8.0.nc")
# Now get the names of the variables in the nc file
names(test$var)
# Get the data from the first variable listed above
# (May not fit in memory)
data = get.var.ncdf(test,varid=names(test$var)[1])
# If you only want a certain range of data.
# The following will probably not fit in memory either
# data = get.var.ncdf(test,varid=names(test$var)[1])[1:464,1:201,1:365]
对于您的问题,您需要将varid=names(test$var)[1]
替换为varid='VARIABLE_NAME'
,其中VARIABLE_NAME
是您要提取的变量。
希望有所帮助。
修改强>
我在我的系统上安装了ncdf
包,上面的代码适用于我!
答案 1 :(得分:0)
您还可以通过使用CDO在R之外提取时间步长/日期和位置,然后将其读入R以进行绘图等。这样做的好处是,您可以直接在坐标空间中工作并直接指定时间步长或日期:
e.g。
cdo seldate,20100101,20121031 in.nc out.nc
cdo sellonlatbox,lon1,lon2,lat1,lat2 in.nc out.nc