2016-07-20 57 views
1

我是一個新的程序員。最近我獲得了1,850個.nc文件,這些文件被分到480個文件。每個文件名都有一個數字來表示月份。所有我想要做的是:打開多個.nc然後寫入多個柵格

  1. 打開的所有文件.NC
  2. 寫在12個文件,一個每個月都.NC文件光柵格式
  3. 平均所有光柵文件。

我知道這應該不難,但我有麻煩。到目前爲止,我還沒有得到過去的第2步:

library(RNetCDF) 
library(raster) 
library(rgdal) 

files=list.files(pattern='*.nc', full.names=TRUE) 

for (i in seq_along(files)){ 
nc=open.nc(files[i])} 

list(nc) 

for(i in 1:length(nc)){ 
    rnc<-raster(nc[i]) 
    writeRaster(rnc, filename=names(rnc), bylayer=TRUE, format="GTiff")} 

正如大家所知道的,我仍然是一個新手/ R的學生,我想我有步驟1中確定,在for循環的第2步不似乎工作。一旦我完成了1和2,我可以工作3(如果你們都可以看到步驟3的簡單答案,請分享)。

謝謝。

+0

您的最終目標是計算每月平均值的權利?使用RNetCDF或ncdf4'軟件包讀取所有網格點值([例如這裏](http://lukemiller.org/index.php/tag/oisst/))會更好還是更快?意味着然後提取到lat,long&mean值的表格。之後,從生成的表格創建柵格網格相當簡單。 – Tung

+0

是的,我想要的是計算所有480個文件的月平均值。我看着你的劇本,但不幸的是,我很難跟上它。有沒有簡單的方法來做到這一點,使用for循環打開.nc然後是for循環估計基於文件名的均值(例如,跳過第2步並轉到第3步),或for循環寫入柵格然後平均? – gren

+0

他們不是我的。 [This one](http://lukemiller.org/index.php/2011/03/extracting-sea-surface-temperatures-from-noaas-oisstv2/)更容易遵循。我會嘗試從那裏開始 – Tung

回答

2

你可以做這樣的事情:

library(raster) 
library(ncdf4) 
files <- list.files(pattern='*.nc', full.names=TRUE) 

或者:

s <- stack(files) 
rnc <- writeRaster(s, filename="x", bylayer=TRUE, format="GTiff")} 

或用一個循環:

for (f in files) { 
    r <- raster(f) 
    fout <- extension(f, '.tif') 
    r <- writeRaster(r, filename=fout, datatype='FLT4S') 
} 

要得到的月平均值,你可以這樣做:

months <- stackApply(s, 1:12, mean) 

假設文件的順序是正確的。