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

如何简化R中多条件筛选、分组统计后的数据合并代码?

优化方案:简洁实现佛罗里达选民分组统计与对比

问题背景

需要从佛罗里达州选民大型数据集中提取两类群体并对比分县占比:

  • 2018年投票(voted_2018 == 1)但2020年未投票(voted_2020 == 0)的选民
  • 2018和2020年都投票(voted_2018 == 1 且 voted_2020 == 1)的选民

原写法通过创建两个独立数据框再合并,存在重复代码且效率较低,以下是更简洁的实现方式。

优化后代码

result <- FL %>%
  # 筛选所有2018年投票的选民(两类群体的共同前提)
  filter(voted_2018 == 1) %>%
  # 按县 + 2020年投票状态分组统计人数
  group_by(county, voted_2020) %>%
  count(name = "n") %>%
  ungroup() %>%
  # 按2020年投票状态分组,计算分县占比(与原代码逻辑一致)
  group_by(voted_2020) %>%
  mutate(prop = n / sum(n) * 100) %>%
  ungroup() %>%
  # 转宽格式,合并两类群体的数据到同一行
  pivot_wider(
    id_cols = county,
    names_from = voted_2020,
    values_from = c(n, prop),
    # 重命名列,让含义更清晰
    names_glue = "{.value}_{ifelse(voted_2020 == 0, '2018_only', 'both_years')}"
  )

代码说明

  • 一次过滤,避免重复:先筛选出2018年投票的选民,减少后续数据处理量,同时覆盖两类目标群体的共同条件。
  • 分组统计一步到位:通过group_by(county, voted_2020)同时统计两类群体的分县人数,无需拆分两个数据框。
  • 统一计算占比:按2020年投票状态分组计算占比,保证逻辑和原代码完全一致(即每个县的某类选民占该类总选民的百分比)。
  • 自动合并结果:用pivot_wider将长格式数据转为宽格式,直接得到每县对应两类群体的人数和占比,替代原代码的merge操作。

原代码对比

原代码需要两次重复的过滤、分组、统计流程,再手动合并;优化后仅需一次数据遍历,代码更简洁,大型数据集下运行效率更高,且结果结构更规整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:41:46