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

在R中基于FIPS列共同值统一五个不同长度数据框的长度

解决方案

核心思路

  1. 从每个年度数据框中提取FIPS县代码列,得到5个独立的FIPS向量
  2. 计算这5个向量的交集,得到连续五年都提交数据的县的FIPS集合
  3. 用这个交集集合分别过滤每个年度的数据框,保留符合条件的观测

方法一:基础R实现

假设你的五个数据框分别命名为df2018、df2019、df2020、df2021、df2022,FIPS列名为fips(请根据实际列名替换):

  1. 提取所有年份的FIPS并求交集
# 生成包含各年份FIPS的列表
fips_list <- list(
  df2018$fips,
  df2019$fips,
  df2020$fips,
  df2021$fips,
  df2022$fips
)

# 计算所有年份共有的FIPS
common_fips <- Reduce(intersect, fips_list)
  1. 过滤每个数据框
# 逐个过滤并保存新数据框
df2018_filtered <- df2018[df2018$fips %in% common_fips, ]
df2019_filtered <- df2019[df2019$fips %in% common_fips, ]
df2020_filtered <- df2020[df2020$fips %in% common_fips, ]
df2021_filtered <- df2021[df2021$fips %in% common_fips, ]
df2022_filtered <- df2022[df2022$fips %in% common_fips, ]

如果想更高效地批量处理,可以把所有数据框先放到一个列表中:

# 将所有数据框存入列表
crime_dfs <- list(
  "2018" = df2018,
  "2019" = df2019,
  "2020" = df2020,
  "2021" = df2021,
  "2022" = df2022
)

# 批量过滤
filtered_crime_dfs <- lapply(crime_dfs, function(df) {
  df[df$fips %in% common_fips, ]
})

# 访问过滤后的数据框:filtered_crime_dfs[["2018"]]

方法二:tidyverse(dplyr)实现

如果你习惯用tidyverse工具链,代码会更简洁:

  1. 加载包并计算共同FIPS
library(dplyr)
library(purrr)

# 生成数据框列表(同上)
crime_dfs <- list(
  "2018" = df2018,
  "2019" = df2019,
  "2020" = df2020,
  "2021" = df2021,
  "2022" = df2022
)

# 提取各年份FIPS并求交集
common_fips <- crime_dfs %>%
  map(pull, fips) %>%  # 从每个数据框中提取fips列
  reduce(intersect)    # 计算所有向量的交集
  1. 批量过滤数据框
filtered_crime_dfs <- crime_dfs %>%
  map(filter, fips %in% common_fips)

为什么这个方法更优

  • 用Reduce(intersect)直接对多个FIPS向量求交集,比手动多次调用intersect或用merge循环简洁得多
  • 通过列表批量处理数据框,避免重复编写过滤代码,尤其适合数据框数量多的场景
  • 仅针对FIPS列做匹配,完全符合你“只保留连续五年提交数据的县”的需求,不会受其他犯罪计数列的影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:35:04