问题描述
我是 R 新手,在处理两个 sp 数据帧时遇到了一些麻烦。
数据框:
- 'violence'(这是一个包含暴力事件实例的数据框,按经度和纬度列出)
- 'DRC_GEO2'(它是包含 DRC 行政边界的 shapefile)。
我想计算由 DRC_GEO2 数据框多边形定义的每个行政区域的暴力事件数量。这篇文章 (https://gis.stackexchange.com/questions/110117/counting-number-of-points-in-polygon-using-r/110246#110246?newreg=5bfe0d571b8241158bac704f188cf026) 有助于概述类似的问题。但是,我不想记录来自“暴力”的数据点样本,我想要数据框中的所有记录实例。
我已经尝试了下面的代码,它确实输出了正确的实例数量,但是,它根据最大的管理单位('ADM1_FR')对它们进行分类,但我希望它按最小的管理单位('ADM2_FR')进行分类).
res
表(res$NAME_1)
返回的是: enter image description here
最终,我想要一个关于原始 shapefile 'DRC_GEO2' 上的暴力实例数量的等值线图。如何将每个行政区域的出现次数添加到数据中以制作区域分布图?
解决方法
在没有 MRE 的情况下很难分享准确的答案(请参阅 How to make a great R reproducible example)。
话虽如此,这里是您如何实现这一目标的一般答案。如果您能够共享数据,我很乐意进行更具体的编辑。
library(ggplot2)
# Count points in each ADM2_FR
res <- table(over(violence_point,DRC_GEO2[,"ADM2_FR"]))
names(res) <- c("ADM2_FR","Violence_Count")
# Merge counts with original data
dat <- merge(DRC_GEO2,res,by = "ADM2_FR",all.x = TRUE)
# Plot choropleth
ggplot() +
geom_polygon(data = dat,aes(fill = Violence_Count,x = long,y = lat,group = group)) +
theme_void() +
coord_map()
请看这里:https://www.r-graph-gallery.com/327-chloropleth-map-from-geojson-with-ggplot2.html