我是R.的新手。我有一个NetCDf文件,它有3个维度时间,x,y,它有六个变量,即rain,tair,swin,lwin,rh和wind。我想根据时间维度提取每个变量的时间序列信息,并将它们导出为csv格式。我已经使用了以下几组代码来做到这一点,但我无法做到单点。我想在两点(30000000,810000)和(3100000,820000)提取数据
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")
但我不知道如何注入这些坐标。我找到了lat和long格式的代码,但我有x和y坐标。如果你们中的任何一个人能够帮我解决这个问题,我会非常慷慨的。
答案 0 :(得分:1)
我猜你正在使用ncdf
包。最好使用ncdf4
或raster
个包。
我不确定我明白你在问什么。如果您可以发布您的原始文件(如果它太大则修剪掉)会更好。
如果我明白你的意思,你想要的是:
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)
...将返回x = 30000000和y = 810000的所有像素的XY坐标。一旦你知道了XY像素的坐标,就可以很容易地像之前那样提取值。我希望自己清楚,错过输入文件并不容易。