r - 使用邻域分析填充栅格中 NA 值的间隙(例如,不是单个单元格)

标签 r gis raster r-raster

使用下面的栅格,NA 值的数量增加

library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
r[r<300] <- NA
summary(getValues(r))

是否可以仅“填充”NA 单元格?
我一直在用this helpful post但如下所示,NA 值保留在最终产品中。
fill.na <- function(x, i=5) {
  if( is.na(x)[i] ) {
    return( round(mean(x, na.rm=TRUE),0) )
  } else {
    return( round(x[i],0) )
  }
}  

r2 <- focal(r, w = matrix(1,3,3), fun = fill.na, 
            pad = TRUE, na.rm = FALSE )
summary(getValues(r2))

我怀疑问题是具有 NA 值的连续区域,我想知道是否还有其他选项可以“填充”缺失数据的空白。

最佳答案

一种方法是放大你的焦点窗口。您可以通过修改“fill.NA”函数来获取 width参数并动态计算中心像素的位置:

fill.na <- function(x) {
  center = 0.5 + (width*width/2) 
  if( is.na(x)[center] ) {
    return( round(mean(x, na.rm=TRUE),0) )
  } else {
    return( round(x[center],0) )
  }
}  

然后:
width = 9
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na, 
            pad = TRUE, na.rm = FALSE)
summary(getValues(r2))

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
300.0   339.0   408.0   488.7   574.5  1806.0    4661 

您可以看到 NA 的数量正在下降。

但是,请注意,由于您的“孔”与栅格外部区域的 NA 值相同,因此这也会在外侧扩展您的栅格,从而为您提供虚假值。见例如:
width = 15
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na, 
            pad = TRUE, na.rm = FALSE)
plot(rast)

enter image description here

因此,您必须找到一种方法来区分“真实”NA 值和数据集范围之外的值。

哈。

关于r - 使用邻域分析填充栅格中 NA 值的间隙(例如,不是单个单元格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641168/

相关文章:

angular - 如何在 Angular 组件中向传单 map 添加标记

python - 跨多个地理围栏的地理围栏半径分布/比率

r - 如何计算栅格堆栈的变化百分比?

r - 在 R markdown 中打印模型摘要而不运行模型

r - 如何计算组合数?

r - Data.table 中的交叉联接似乎不保留列名

google-maps - 如何设置透明叠加 WMS 图层的样式

r - 在 terra SpatRaster 中命名分类级别时,如何防止添加额外级别?

r - 将多个文本文件合并为一个 tsv 文件