如何在R中合并两个shapefile并对含19个字段的文件做均值计算
操作实现方案
这个需求完全可以通过R的空间数据处理工具实现,核心用到sf包完成矢量数据读取、空间连接、聚合统计操作,具体步骤如下:
前期准备
- 先安装并加载所需依赖包
install.packages(c("sf", "dplyr")) library(sf) library(dplyr)
步骤1:读取两个shapefile文件
# 读取第一个含4个字段的shapefile,替换为你的本地文件路径 shp1 <- st_read("path/to/your/first_shapefile.shp") # 读取第二个含19个字段的shapefile,替换为你的本地文件路径 shp2 <- st_read("path/to/your/second_shapefile.shp")
注意:两个shapefile需要保证坐标系一致,如果坐标系不同先用
st_transform()函数统一坐标系后再进行后续操作。
步骤2:对第二个shapefile的19个字段做均值聚合
如果是按第一个shapefile的矢量单元分组,统计第二个文件对应范围内的字段均值,操作如下:
# 提取第二个shapefile的19个非几何字段名,排除几何列 shp2_fields <- setdiff(names(shp2), attr(shp2, "sf_column")) # 空间连接+分组统计均值 shp_agg <- st_join(shp1, shp2) %>% group_by(across(all_of(names(shp1)))) %>% summarise(across(all_of(shp2_fields), mean, na.rm = TRUE))
如果是按属性关联合并,两个文件存在公共ID类字段,可以把上述
st_join替换为left_join,指定公共关联字段即可。
步骤3:提取指定字段,输出最终结果
# 获取第一个文件第三个字段的名称 field3_name <- names(shp1)[3] # 保留目标字段+几何列,生成最终文件 final_shp <- shp_agg %>% select(all_of(c(field3_name, shp2_fields))) # 导出合并后的shapefile st_write(final_shp, "path/to/output/merged_result.shp", delete_layer = TRUE)
计算均值时如果不需要忽略空值,可以删除
na.rm = TRUE参数。
内容的提问来源于stack exchange,提问作者Bruna
相关产品推荐
相关产品推荐

