2016-07-20 27 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) 

假设文件的顺序是正确的。