如何基于概率条件合并重叠sf对象并保留最优记录
解决SF对象合并并保留重叠区域最高概率记录的方法
首先修正你提供的示例代码(补全缺失的管道符):
library(sf) library(dplyr) nc <- st_read( system.file("gpkg/nc.gpkg", package="sf"), quiet=TRUE ) a <- nc %>% select(geom) %>% slice(1:60) %>% mutate(probability = runif(n=60, min=1, max=100), name = 'A') b <- nc %>% select(geom) %>% slice(50:100) %>% mutate(probability = runif(n=51, min=1, max=100), name = 'B')
根据你的重叠场景,分两种情况处理:
场景1:重叠区域为完全相同的几何要素(如示例)
你的示例中,a和b的重叠部分是50-60行的相同几何对象,直接按几何分组筛选最高概率记录即可:
# 合并所有SF对象 combined <- bind_rows(a, b) # 按几何分组,保留每组概率最高的记录 result <- combined %>% group_by(geom) %>% slice_max(probability, n=1, with_ties=FALSE) %>% ungroup()
slice_max用来快速筛选最大值记录,with_ties=FALSE确保每组只返回一条(若存在相同最大值,会随机选取,可额外添加排序字段控制选择逻辑)
场景2:重叠区域为空间相交的不同几何要素
如果是不同几何面空间重叠(非完全匹配),需要先拆分重叠区域再筛选:
# 合并所有SF对象 combined <- bind_rows(a, b) # 拆分所有空间重叠的几何要素,保留原始属性 intersected <- st_intersection(combined) # 按拆分后的新几何分组,筛选最高概率记录 result <- intersected %>% group_by(geom) %>% slice_max(probability, n=1, with_ties=FALSE) %>% ungroup()
st_intersection会将重叠的面拆分为独立的子面,确保每个空间区域只保留对应最高概率的记录
内容的提问来源于stack exchange,提问作者kjtheron
相关产品推荐
相关产品推荐

