我试图在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文件中提取正确的值?
谢谢, 爱德华
答案 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)
希望有所帮助