从netCDF中提取某些值

时间:2013-07-11 17:14:42

标签: r

我有一个包含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))

但不知怎的,它不起作用。有人有解决方案吗?

提前致谢...

2 个答案:

答案 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