如何对R语言sf对象按geometry与sector字段聚合统计项目数量
报错原因
base R原生的aggregate函数不支持将sfc类型的几何列(列表格式存储)直接作为公式接口的分组变量,强行unlist几何列会将每个点位的经纬度拆分为单独元素,导致长度是原数据行数的2倍,和sector列长度不匹配,因此出现报错。
正确实现方法
方案1:使用sf包重载的aggregate方法
sf包专门针对空间数据重写了aggregate函数,直接支持geometry作为分组变量,输出结果仍为sf对象,保留空间属性:
# 需提前加载sf包 library(sf) FDI_sf_ag1 <- aggregate(n_proj ~ geometry + sector, data = FDI_sf, FUN = sum)
方案2:使用dplyr+sf的tidyverse风格写法
更适合习惯tidy语法的用户,逻辑更直观:
# 需提前加载相关包 library(sf) library(dplyr) FDI_sf_ag1 <- FDI_sf %>% group_by(geometry, sector) %>% summarise(total_n_proj = sum(n_proj), .groups = "drop")
内容的提问来源于stack exchange,提问作者nflore
相关产品推荐
相关产品推荐

