2014-11-09 119 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像素座標,就可以很容易地提取之前完成的值。我希望自己清楚,不容易遺漏輸入文件。