2013-04-24 244 views
2

我正嘗試在PC上使用R版本2.14.0從NOAA(ftp://ftp.cpc.ncep.noaa.gov/wd53rl/cfsr/)讀取.bin文件。 當我使用函數readBin讀取文件時,這些值非常高(從1e16到9e16),而它們不應該高於330.在R中使用NCEP/NOAA .bin文件

我編寫了下面的代碼來下載包含信息的.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') 

我曾嘗試使用不同的「端」或「是什麼」,但沒有爲我工作。我怎樣才能從bin文件中提取正確的值?

感謝, 愛德華

+0

我會追捕數據提供者,並找出該文件的結構,以便您可以正確地指定。你怎麼知道它是720x720例如? – mdsumner 2013-04-29 20:19:54

回答

0

我不知道,如果你設法解決這個問題,但我曾與NOAA數據類似的問題。我的數據是從-40到40和lon -20到55,間距爲0.1度。因此它有751列和801行。儘管諾阿說它是'小'endian,我發現'大'endian爲我的機器工作。此外,我不得不翻轉我的數據,以便矩陣與R讀入並繪製它的方式相匹配。最後我覆蓋了非洲地圖,因爲我的數據是針對非洲的降雨數據。我還安裝了'柵格','地圖'和'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) 

希望幫助