在R中基于分类栅格数据用邻近法填充栅格NA值
用Terra填充分类栅格的NA值(众数邻域填充)
问题场景
将Shapefile格式的地质数据通过Terra包转换为分类栅格后,湖泊、河流等水域区域存在大量NA值,需要用邻域内出现最频繁的类别填充这些空缺。此前尝试terra::fillholes无法完全填补空隙;使用terra::focal时,默认逻辑针对数值计算,选择modal选项填充后会丢失factor类型的分类层级,导致分类属性失效,且分类数据无法通过插值方法处理。
解决方案
使用terra::focal搭配modal统计量实现邻域众数填充,填充完成后重新关联原栅格的分类层级即可恢复完整的分类属性。
完整代码示例
library(terra) # 模拟factor类型的分类栅格数据 r <- rast(matrix(c(rep(1, 10), 11:16), nrow = 8, ncol = 8)) r <- as.factor(r) r[1, 1] <- NA # 模拟NA值 # 以3x3邻域的众数填充NA(窗口大小可按需调整) filled_r <- focal(r, w = 3, fun = modal, na.rm = TRUE) # 恢复原栅格的分类层级信息 levels(filled_r) <- levels(r) # 查看填充后的分类栅格 print(filled_r)
关键说明
w参数:控制邻域窗口的大小,示例中为3x3(以目标单元格为中心的9个单元格),可根据数据空缺范围调整为5x5等更大窗口fun=modal:指定计算邻域内出现频率最高的类别,na.rm=TRUE确保计算时忽略邻域内的NA值- 层级恢复:
focal处理后会丢失factor的分类层级,通过levels(filled_r) <- levels(r)重新绑定原分类信息,保证栅格的分类属性不受影响
内容的提问来源于stack exchange,提问作者asnead94
相关产品推荐
相关产品推荐

