在R中的NETCDF中填充值

我希望R知道此堆栈NetCDF包含值-1e30,这是一个填充值,并且是NA。由于其他实际值与NA值(1e17至-4e18)非常相似。R应该理解-1e30是NA,并在进一步分析代码na.rm=TRUE时跳过了NA。 我正在处理NetCDF DATA 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,-2119029758099456,-1656679481475072,3074375171440640,2699225347391488,1389911546527744,3767667181748224,..

L257367 回答:在R中的NETCDF中填充值

您有一个向量

a <- c(1,2,3,1e30)

您需要替换其中的值:

a <- ifelse(a == 1e30,NA,a)
,

也许您应该使用|作为ifelse()中的条件

r <- mean(ifelse(Data < -1e30 | is.nan(Data),Data),na.rm = T)

带有虚拟数据的示例

Data <- c(NaN,4748499736330240,-2119029758099456,-1656679481475072,3074375171440640,2699225347391488,1389911546527744,3767667181748224,-1e31)
r <- mean(ifelse(Data < -1e30 | is.nan(Data),na.rm = T)

这样

> r
[1] 1.700567e+15

其中

> ifelse(Data < -1e30 | is.nan(Data),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
本文链接:https://www.f2er.com/2778929.html

大家都在问