原則として、あなたはそこまでの道のりの 2/3 です。もちろん、次のようなものを使用して開始インデックスを作成できます。
require(ncdf4)
ncFile <- nc_open( MyNetCDF )
LonStartIdx <- which( ncFile$dim$lon$vals == 355)
LatStartIdx <- which( ncFile$dim$lat$vals == 34.5)
カウントについても同じことを行います。次に、必要な変数を読み取ります
MyVariable <- ncvar_get( ncFile, varName, start=c( LonStartIdx, LatStartIdx), count=...)
ただし、あなたの場合、私の知る限り、あなたは運が悪いです。netcdf ルーチンの読み取り/書き込みは、順番に処理を行います。経度が 0 ~ 360 の座標があり、ゼロ子午線を含むボックスに関心があるため、グリッドは折り返します。
あなたにとって(データが多すぎないと仮定すると)、フルグリッドをRに読み込み、Rの「ボックス」subsetを使用してインデックスを作成しwhichて切り取る方が理にかなっています.
ncFile <- nc_open( MyNetCDF )
LonIdx <- which( ncFile$dim$lon$vals > 355 | ncFile$dim$lon$vals < 10)
LatIdx <- which( ncFile$dim$lat$vals > 34.5 & ncFile$dim$lat$vals < 44.5)
MyVariable <- ncvar_get( ncFile, varName)[ LonIdx, LatIdx]
nc_close(ncFile)
備考: 私ncdf4は .
Ok。コメントは必要な限り長くできないので、回答を更新しました心配ありません。質問を順を追って見ていきましょう。
- 関数の
which方法が機能します。私はそれを自分で使用します。
データは netcf ファイルと同様の形式になりますが、0 子午線に問題があるかどうかはよくわかりません (私はそうだと思います)。次のようにして、2 つの半分を交換する必要がある場合があります (2 番目の例の対応する行を置き換えます)。
LonIdx <- c(which( ncFile$dim$lon$vals > 355) , which( ncFile$dim$lon$vals < 10) )
これにより、座標インデックスの順序が変更され、西部が最初に、次に東部が来るようになります。
すべてを 2x3 データ フレームに再フォーマットすることが可能です。2 番目のコード例が返すデータを取得します (行列 [lon x lat] になります。また、座標の値も取得します。
lon <- ncFile$dim$lon$val[LonIdx]
(または、あなたの例で経度がどのように呼び出されるか、同じlat)。次に、次を使用して行列を組み立てます
cbind( rep(lat, each=length(lon)), rep(lon,length(lat)), c(myVariable) )
もちろん、座標は netcdf ファイルと同じになります...
座標を台無しにしていないという確信は約 98% しかないので、最後の cbind をサミティ チェックする必要があります。デスクトップで見つけた R スクリプトでは、ループを使用していますが、これは... 悪質です... これは (少し?) 高速であり、より賢明でもあります。