【发布时间】:2014-01-09 10:13:47
【问题描述】:
我在将数据从 GrADS 导出到 .csv 文件时遇到了很大的困难,尽管它应该很容易。有问题的文件来自与亚洲降雨量有关的 APHRODITE 项目。基本上我可以使用以下方法将该文件读入 GrADS:
open d:/aphro/aphro.ctl
它告诉我:
Data file d:/aphro/APHRO_MA_025deg_V1101R2.%y4 is open as file 1
Lon set to 60.125 149.875
Lat set to -14.875 54.875
Lev set to 1 1
Time values set: 1961:1:1:0 1961:1:1:0
E set to 1 1
如果我执行:
q ctlinfo
它还告诉我我有三个变量:
precip 1 0 daily precipitation analysis
rstn 1 0 ratio of 0.05 degree grids with station
flag 1 0 ratio of 0.05 degree grids with snow
好的,现在我要做的就是在 .csv 文件(或 .txt)文件中生成一个列表,其中包含以下信息:
Precipitation Lon Lat Time(date)
听起来很简单,但我就是做不到。一种方法是使用:
fprintf precip d:/output.csv %g 1
这为我提供了一个 .csv 文件,其中包含当天的全部数据在一长列中(这是我想要的)。我也可以对不同文件中的 lon 和 lat 做同样的事情并将它们组合起来。问题是输出文件需要很长时间 - 如果您不介意很多列,它会更快,但这会变得难以管理。基本上这种方法太慢了。
另一种方法是通过以下方式将数据导出为 NetCDF 文件:
Set sdfwrite -4d d:/output.nc
define var = precip
sdfwrite precip
这会很快写入一个名为 output.nc 的文件,其中包含我需要的所有数据。然后使用 R 我可以单独读取所有变量,例如
f <- open.ncdf("D:/aphro/test.nc")
A <- get.var.ncdf(nc=f,varid="time")
B <- get.var.ncdf(nc=f,varid="rain")
D <- get.var.ncdf(nc=f,varid="lon")
E <- get.var.ncdf(nc=f,varid="lat")
但我想要的是制作一个输出文件,其中每一行告诉我时间、降雨量、经度和纬度。我尝试了 rbind,但它没有将正确的时间(日期)与正确的雨量相关联,并且类似地弄乱了 lon 和 lat,因为有数十万个降雨数据但只有几个日期,只有 360 lon 点和 280纬度点(即降雨数据是几天内每天的数据网格)。我相信这应该很容易,但怎么做呢?
请帮忙
托尼
【问题讨论】:
-
我也在处理 NetCDF 文件(来自 TRMM 的降雨数据...)我通过 spacetime 数据包创建了 STFDF 文件b>raster 数据包brick 功能。给了我充分的空间和时间灵活性,并且易于处理等。抱歉,我现在真的不能写一个例子
-
试试 cbind(expand.grid(get.var.ncdf(nc=f,varid="lon"), get.var.ncdf(nc=f,varid="lat"), get .var.ncdf(nc=f,varid="time")), get.var.ncdf(nc=f,varid="rain")) 但没有更好的文件描述我们只能猜测。
-
对于信息,我通过使用 cbind 和 get.var.ncdf 方法解决了这个问题。首先,我在 Grads 中设置时间:设置 t 1 365 即第一年的数据,并使用 sdfwrite 输出。使用 R 并加载 NCDF 库,我使用 get.var.ncdf 读取变量,经度和纬度。然后我使用 cbind(expand.grid(lon,lat)) 扩展了 lon 和 lat 的网格,并扩展了变量,即 expand.grid(variable)。然后我从变量中选择了一天的价值,并再次使用 cbind 将其与 lon、lat 数据相结合 - 并每天重复。