3

いくつかの netcdf ファイルがあります。各 nc ファイルにはいくつかの変数があります。「Soil_Moisture」と「Soil_Moisture_Dqx」の 2 つの変数だけに関心があります。

「Soil_Moisture_Dqx」に基づいて「Soil_Moisture」をフィルタリングしたいと思います。対応する「Soil_Moisture_Dqx」ピクセルの値が 0.04 より大きい場合は常に、「Soil_Moisture」の値を NA に置き換えたいと考えています。

:ダウンロードするファイルは次のとおりです。

1- このループを試してみましたが、f[1] または f[2] と入力すると、ループが正しくないという奇妙な結果が得られました。

 a<-list.files("C:\\3 nc files", "*.DBL", full.names = TRUE)

for(i in 1:length(a)){
f=open.ncdf(a[i])
A1 = get.var.ncdf(nc=f,varid="Soil_Moisture",verbose=TRUE)
A1* -0.000030518509475997 ## scale factor
 A2 = get.var.ncdf(nc=f,varid="Soil_Moisture_Dqx",verbose=TRUE)
A2*-0.0000152592547379985## scale factor
A1[A2>0.04]=NA ## here is main calculation I need
 }

2- 誰かもう一度書いてくれませんか?

4

2 に答える 2

3

欠落値は、データが「欠落」していることを示すものとして値が取得される netCDF ファイル内の特別な値です。set.missval.ncdfしたがって、この値を設定するには を使用する必要があります。

a<-list.files("C:\\3 nc files", "*.DBL", full.names = TRUE)

SM_NAME <- "Soil_Moisture"
SM_SDX_NAME <- "Soil_Moisture_Dqx"
library(ncdf)
lapply(a, function(filename){
  nc <- open.ncdf( filename,write=TRUE )
  SM <- get.var.ncdf(nc=nc,varid=SM_NAME)
  SM_dqx <- get.var.ncdf(nc=nc,varid=SM_SDX_NAME)
  SM[SM_dqx > 0.4] <- NA
  newMissVal <- 999.9
  set.missval.ncdf( nc, SM_NAME, newMissVal )
  put.var.ncdf( nc, SM_NAME, SM )
  close.ncdf(nc)
 })

EDITいくつかのチェックを追加

ここで、逃したとタグ付けされたポイントの数を数えるのは興味深いことです。

奇数の倍率を適用しないと、次のようになります。

lapply(a, function(filename){
  nc <- open.ncdf( filename,write=TRUE )
  SM_dqx <- get.var.ncdf(nc=nc,varid=SM_SDX_NAME)
   table(SM_dqx > 0.4)
  })

[[1]]
[1] 810347     91

[[2]]
[1] 810286    152

[[3]]
[1] 810287    151

[[4]]
[1] 810355     83
于 2013-03-05T15:16:49.860 に答える