2017-07-14 17 views
2

にマージするNetCDFファイルが2つあります(それぞれの.ncファイルには、感受性、感染、回復、および住みやすいという4つの変数があります)。各変数の次元は64 x 88です。これらの2つのファイルを1つのNetCDFファイルにマージして、マージされたファイルが別々にスタックするようにしたいと思います。2つのファイルから感染しやすく、2つのファイルから感染し、2つのファイルから回復し、ここでnetCDFファイルをR

は、2つのファイル(firstsecond

は、誰もがこれで私を助けてくださいもらえますか。事前に

おかげで、 アショク

+0

「個別にスタックする」とはどういう意味ですか? – Bart

+0

新しい変数の次元は '(64,176)'か '(128,88)'であるべきですか? – JanLauGe

+0

「別々に積み重ねる」とは、アレイを上下に並べることです。例えば、file1からの感受性は時間0001、file2からの感受性は0002の時間などです.Panoplyと呼ばれる無料のツールがあります。これは、netcdfファイルに変数の時間コンテキストがある場合にアニメーションを作成します(私の場合、感受性、感染、回復)。 –

答えて

2

ncdf4パッケージには、あなたがやりたいだろう。以下のコードを見てください.1つの変数の例だけです。

#install.packages('ncdf4') 
library(ncdf4) 

file1 <- nc_open('England_aggr_GPW4_2000_0001.nc') 
file2 <- nc_open('England_aggr_GPW4_2000_0002.nc') 

# Just for one variable for now 
dat_new <- cbind(
    ncvar_get(file1, 'Susceptible'), 
    ncvar_get(file2, 'Susceptible')) 
dim(dat_new) 
var <- file1$var['Susceptible']$Susceptible 

# Create a new file 
file_new3 <- nc_create(
    filename = 'England_aggr_GPW4_2000_new.nc', 
    # We need to define the variables here 
    vars = ncvar_def(
    name = 'Susceptible', 
    units = var$units, 
    dim = dim(dat_new))) 

# And write to it 
ncvar_put(
    nc = file_new, 
    varid = 'Susceptible', 
    vals = dat_new) 

# Finally, close the file 
nc_close(file_new) 

更新:以下に示すように 別のアプローチは、ラスタパッケージを使用しています。私は4Dラスタスタックの作り方を理解していなかったので、変数ごとに1つのNCDFファイルにデータを分割しています。それはあなたのために働くだろうか?

#install.packages('ncdf4') 
library(ncdf4) 
library(raster) 

var_names <- c('Susceptible', 'Infected', 'Recovered', 'Inhabitable') 

for (var_name in var_names) { 

    # Create raster stack 
    x <- stack(
    raster('England_aggr_GPW4_2000_0001.nc', varname = var_name), 
    raster('England_aggr_GPW4_2000_0002.nc', varname = var_name)) 

    # Name each layer 
    names(x) <- c('01', '02') 

    writeRaster(x = x, 
       filename = paste0(var_name, '_out.nc'), 
       overwrite = TRUE, 
       format = 'CDF') 
} 
+0

file_new行を実行すると、次のエラーが発生します [1] "エラー、渡された変数のクラスがncdim4クラスではありません!" [1]変数dimの数値1を処理しているときにエラーが発生しました ncvar_def(name = "感受性"、units = var $ units、dim = dim(dat_new))のエラー: このdimのクラスは整数です。 cbind()の代わりに私は同じものに感受性の次元を保存できるのだろうかと思うが、私はファイル1に対して感受性[1]、ファイル2に対して感受性[2]などのリストを望むだろう。 –

+0

私は試してみる明日これを調べる – JanLauGe

+0

は、 'raster'パッケージを使って別のアプローチを示すために私の答えを更新しました。これがあなたのために働くかどうか教えてください – JanLauGe

関連する問題