2014-11-09 53 views
1

我是R新手。我有一个NetCDf文件,它有3个维度,即时间,x,y,它有六个变量,即rain,tair,swin,lwin,rh和风。我想根据时间维数提取每个变量的时间序列信息并将它们导出为csv格式。我已经使用了以下几组代码来做到这一点,但我无法做到这一点。我想在两个点(30000000,810000)和(3100000,820000)从NetCDF文件中提取使用X,Y坐标

setwd("C:/Users/a/Desktop/pd/1/") 
f<-open.ncdf("merra.rfe.90m.200208.nc") 
t<-get.var.ncdf(f,varid="time") 
B<-get.var.ncdf(f,varid="rain") 
c<-get.var.ncdf(f,varid="tair") 
write.table(t(rbind(A,B,c)),file="output.csv") 

提取数据,但我不知道如何注入这些坐标。我已经找到经纬度和长格式的代码,但我有x和y坐标。如果你们中的任何一个人能够离开并帮助我解决这个问题,我会非常慷慨。

回答

1

我猜你正在使用ncdf包。最好使用ncdf4raster包。

我不知道我明白你在问什么。如果你可以发布你的原始文件(如果它太大,则修剪下来)会更好。

如果我明白你的意思,你想在这个线的东西:

library(ncdf4) 
f <- nc_open("file.nc") 
t <- ncvar_get(f, "rain") 
point1_t <- t[30000000,810000,] #Notice the extra "," 
point2_t <- t[3100000,820000,] 
#etcetera 

你没有指定是否30000000,810000是X,Y坐标或在一些单位系统。如果它们是X,Y坐标,并且文件已正确设置X-Y尺寸,那么您应该很好地遵循上述步骤。如果这些值以某些单位表示,因此不是X-Y像素值(例如像素[30,12] =(100000,400000)米),则应该将它们存储在某些变量中。
如果是这样的话:

x <- ncvar_get(f, "x") 
y <- ncvar_get(f, "y") 
which(x == 30000000 && y == 810000, arr.ind=T) 

...将返回XY坐标有X = 3000和y = 810000的所有像素。一旦知道XY像素坐标,就可以很容易地提取之前完成的值。我希望自己清楚,不容易遗漏输入文件。