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

R语言sf包处理GeoJSON数据时如何按指定年份筛选删除行?

问题根源
  • 你误用了sf包的st_filter()函数:该函数是空间筛选工具,核心逻辑是基于空间几何关系(如相交、包含)保留和第二个sf对象存在空间匹配的记录,并不是用来按属性字段筛选行的。
  • 你当前代码的实际执行逻辑是:先筛选出2018-2021年的事故点,再保留所有和这些事故点空间位置重叠的记录——这就会把其他年份、但事发位置和目标年份事故位置一致的记录也保留下来,就是你看到非目标年份记录残留的原因。
正确实现方案

sf数据框完全兼容tidyverse的属性操作,你要做的属性筛选直接用dplyr的filter()函数即可:

library(sf)
library(dplyr)

crashes <- st_read("Crash_Analysis_System_(CAS)_data.geojson")

# 直接按年份属性筛选,无需调用st_filter
crashes <- crashes %>%
  # 若crashYear为数值型,直接写数值即可;若为字符串类型可保留引号
  filter(crashYear %in% c(2018, 2019, 2020, 2021))
结果验证

筛选完成后可执行以下代码确认年份范围符合要求:

# 查看筛选后所有存在的年份
unique(crashes$crashYear)
# 统计各年份的记录数量
table(crashes$crashYear)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:09:04