【问题标题】:How to replace NA's in a raster object如何替换栅格对象中的 NA
【发布时间】:2012-08-11 13:59:33
【问题描述】:

我需要替换下面示例中的栅格对象 (r) 中的 NA

library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)

我也尝试删除这些(并将结果放在data.frame 中),但无济于事。

dfr <- as.data.frame(r, na.rm=T)
summary(dfr)
# test       
# Min.   : 128.4  
# 1st Qu.: 293.2  
# Median : 371.4  
# Mean   : 423.2  
# 3rd Qu.: 499.8  
# Max.   :1805.8  
# NA's   :6097

【问题讨论】:

  • 是的,summary(as.data.frame(r, na.omit=T)) 说有 6097 个NA
  • 欢迎来到 StackOverflow。 +1 reproducible example
  • 正如您在答案中看到的,na.omit 是一个函数,而不是as.data.frame 的参数。
  • 我看到了,@seancarmody,谢谢!
  • 尝试 SpatialPixelsDataFrame 用于没有 NA 的稀疏网格,但这是非常开放的,您真正需要什么?

标签: r spatial raster


【解决方案1】:

我不确定从 raster 对象中删除 NA 值是否有意义,但您可以轻松替换它。

例如:

oldpar <- par(mfrow=c(1, 2))
plot(r)
r[is.na(r)] <- 250
plot(r)
par(oldpar)


如果您确实需要,可以将栅格值提取到矢量中,然后删除 NA 值。 (不过,由于您丢失了空间信息,我看不出这有什么帮助。)

r <- raster(filename)

r <- values(r)
head(r)
[1] NA NA NA NA NA NA

head(na.omit(r))
[1] 633.686 712.545 654.162 604.442 857.256 755.506

【讨论】:

    【解决方案2】:

    一种更安全的内存方法(对于大文件)是使用重新分类:

    library(raster)
    filename <- system.file("external/test.grd", package="raster")
    r <- raster(filename)
    rna <- reclassify(r, cbind(NA, 250))
    

    您可以通过以下三种方式使用terra 完成此操作

    library(terra)
    f <- system.file("ex/elev.tif", package="terra")
    r <- rast(f)
    x <- classify(r, cbind(NA, -99))
    y <- subst(r, NA, -99)
    z <- ifel(is.na(r), -99, r)
    

    【讨论】:

    • 这似乎不适用于 NaN(即 reclassify(r, cbind(NaN, NA)))
    猜你喜欢
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多