在R中使用NCEP / NOAA .bin文件

时间:2013-04-24 20:19:36

标签: r

我试图在PC上使用R版本2.14.0从NOAA(ftp://ftp.cpc.ncep.noaa.gov/wd53rl/cfsr/)读取.bin文件。 当我使用函数readBin读取文件时,值非常高(从1e16到9e16),而它们不应高于330.

我编写了下面的代码来下载包含该信息的.zip文件(注意:编号20130422是相关的 到目前为止,因此可以提供另一个日期)。

    file.name <- 'Data.zip' 
    file.URL <- 'ftp://ftp.cpc.ncep.noaa.gov/wd53rl/cfsr/cargill.20130422.zip' 
    download.file(file.URL,file.name) 

我手动解压缩文件并使用具有最高温度数据的文件(tmax.20130422.daily.latlon.bin)

然后,我编写了一个代码来读取最高温度文件(720 * 720是我想要读取的行数和列数):

    to.read <- 'tmax.20130422.daily.latlon.bin' 
    bin <- readBin(to.read, what = 'numeric',n = 720*720,endian='little') 

我试图使用不同的“endian”或“what”,但没有任何对我有用。如何从bin文件中提取正确的值?

谢谢, 爱德华

1 个答案:

答案 0 :(得分:0)

我不确定您是否设法解决了这个问题,但我对NOAA数据也存在类似问题。我的数据来自lat -40到40和lon -20到55,间距为0.1度。因此它有751列和801行。即使NOAA说它是'小'端,我发现'大'端为我的机器工作。此外,我不得不翻转我的数据,以便矩阵与R读取它的方式相匹配并绘制它。最后,我覆盖了非洲地图,因为我的数据是非洲的降雨数据。我还安装了'raster','maps'和'mapdata'软件包。

以下是我的解决方案:

infile <- file("clim.bin.0101", "rb")
outfile <- matrix(readBin(infile, "numeric", 
                      n = 751 * 801, size = 4, 
                      endian = "big"), ncol= 751, 
              nrow = 801, byrow = TRUE);    
close(infile)
tran_outfile <- apply(outfile,2,rev) #flips the matirx so data is in correct order 
r = raster(tran_outfile)
extent(r) = extent(c(xmn=-20,xmx=55,ymn=-40,ymx=40))
plot(r)
plot(wrld_simpl, add=T)

希望有所帮助