如何在R语言中实现栅格值的部分匹配?
解决SpatRaster字符型单元格的字符串匹配问题
要查找SpatRaster中包含特定单词/模式的单元格,无需依赖app函数(易出现版本兼容或参数传递问题),直接对栅格的底层向量操作即可,逻辑和处理普通R向量完全一致:
方法1:直接操作栅格向量(推荐)
library(terra) # 创建示例字符型栅格 x <- rast(ncol = 10, nrow = 10) x[] <- sample(c("AA", "AB", "BB"), size = 100, replace = TRUE) # 用grepl匹配包含"A"的单元格,生成标记栅格 match_raster <- x match_raster[] <- grepl("A", x[]) # 查看结果 match_raster
该方法通过x[]直接获取所有单元格的向量值,用grepl完成正则匹配后,将结果赋值回新栅格,返回的栅格中1代表匹配成功,0代表未匹配。
方法2:使用lapp函数
如果习惯用terra的层操作函数,lapp(层应用)比app更适配单层栅格的字符串匹配场景:
match_raster <- lapp(x, function(i) grepl("A", i))
复杂模式匹配
上述方法支持任意正则表达式,比如匹配以"B"结尾的单元格:
match_raster[] <- grepl("B$", x[])
内容的提问来源于stack exchange,提问作者nya
相关产品推荐
相关产品推荐

