[英]Fill value in NETCDF in R
我想讓 R 知道這個堆棧 NetCDF 包含一個值 -1e30,它是一個填充值,它是一個 NA。 由於其他實際值與 NA 值(1e17 到 -4e18)非常相似。R 應該理解 -1e30 是 NA 並在代碼na.rm=TRUE
進一步分析中跳過 NA。 我正在處理 NetCDF 數據https://drive.google.com/open?id=14OX9JAe7oZ7xPRuIzR7YB2P3OHC3zjJU中的文件列表
> ras <- list.files("filepath", pattern = "\\.nc$", full=TRUE)
> Data <- stack(ras)
> u2 <- mean(Data, na.rm=TRUE).
我該如何編寫代碼?
> NA<- -1e30
> Mean <-mean(Data,na.rm=TRUE)
或者
> Data[Data < -1e30] = NA
> Mean <-mean(Data,na.rm=TRUE)
這段代碼會讓 R 理解 -1e30 是數據集中的 NA 並在取出平均值時跳過 -1e30 嗎?
> dput(Data[1:100, 1:100])
NaN, 4748499736330240, NA, NA, NA, -2119029758099456, -1656679481475072, 3074375171440640, 2699225347391488, 1389911546527744, 3767667181748224,..
你有一個向量
a <- c(1,2,3,1e30)
您需要替換那里的值:
a <- ifelse(a == 1e30, NA, a)
也許你應該使用|
對於ifelse()
條件
r <- mean(ifelse(Data < -1e30 | is.nan(Data), NA, Data),na.rm = T)
帶有虛擬數據的示例
Data <- c(NaN, 4748499736330240, NA, NA, NA, -2119029758099456, -1656679481475072, 3074375171440640, 2699225347391488, 1389911546527744, 3767667181748224, -1e31)
r <- mean(ifelse(Data < -1e30 | is.nan(Data), NA, Data),na.rm = T)
以至於
> r
[1] 1.700567e+15
在哪里
> ifelse(Data < -1e30 | is.nan(Data), NA, Data)
[1] NA 4.748500e+15 NA NA
[5] NA -2.119030e+15 -1.656679e+15 3.074375e+15
[9] 2.699225e+15 1.389912e+15 3.767667e+15 NA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.