You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R处理百万警情数据:生成Top20辖区数据框遇空值问题

解决方案

问题根源

你生成空数据框的核心原因是top20$JURISDICTION大概率是因子(factor)类型,和police$JURISDICTION的类型不匹配,导致筛选时无法匹配到数据。

更高效的处理方法

方案1:用split拆分(推荐)

不需要手动循环,一行代码就能完成拆分,还能把所有辖区数据统一存进列表,方便后续批量处理:

# 提取Top20辖区名称并转为字符型
top20_juris <- as.character(top20$JURISDICTION)
# 筛选目标数据并按辖区拆分
top20_data_list <- split(
  police[police$JURISDICTION %in% top20_juris, ],
  police[police$JURISDICTION %in% top20_juris, ]$JURISDICTION
)
  • 调用单个辖区数据:top20_data_list[["XX辖区"]]
  • 后续做图表时,能结合purrr包批量生成,比单独维护20个数据框高效得多

方案2:修复循环代码

如果一定要生成单独的全局数据框,修改代码避免因子匹配问题:

top20_juris <- as.character(top20$JURISDICTION)
for (juris in top20_juris) {
  assign(juris, dplyr::filter(police, JURISDICTION == juris))
}
  • 直接用辖区名称循环,比按索引循环更直观,同时转字符型解决了匹配失效问题

批量可视化示例

结合ggplot2和purrr可以批量生成所有Top20辖区的图表,比如犯罪类型分布柱状图:

library(purrr)
library(ggplot2)

# 批量生成图表
top20_plots <- map(top20_data_list, function(df) {
  ggplot(df, aes(x = 犯罪类型)) +
    geom_bar(fill = "#2E86AB") +
    labs(title = paste(df$JURISDICTION[1], "犯罪类型分布"),
         x = "犯罪类型", y = "警情数量") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
})

# 查看指定辖区图表
top20_plots[["XX辖区"]]

内容的提问来源于stack exchange,提问作者Qats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:36:14