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

R语言dplyr处理选举数据:省份得票前两名政党提取异常排查

选举结果数据提取省份得票Top2政党的问题

处理选举结果数据时,需要展示各省份得票最多和第二多的政党及其得票数,目前第一多的政党及得票能正常显示,但第二多的政党返回NA。

示例数据

structure(list(plaka = c("01", "01", "01", "01", "01", "01"), 
    il_adi = c("ADANA", "ADANA", "ADANA", "ADANA", "ADANA", "ADANA"
    ), parti = c("MİLLET", "VATAN PARTİSİ", "CHP", "HAK-PAR", 
    "SAADET", "DSP"), oy_2015 = c(482, 2841, 374000, 2581, 8001, 
    774)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", 
"data.frame"))

尝试的代码

mv_26 %>% 
  group_by(il_adi) %>% 
  arrange(il_adi,desc(oy_2015)) %>% 
  slice(1:2) %>% 
  summarise(win_party_2015 = parti[which.max(oy_2015)],
            win_party_p_2015 = max(oy_2015)/sum(oy_2015),
            second_2015 = parti[nth(oy_2015,index.return = 2)])

补充说明:需要在summarise()中实现需求,不能新建数据框,要基于原始数据集计算得票率等指标。


问题原因

  1. nth函数参数错误:使用Rfast的nth时,index.return是逻辑值(TRUE/FALSE),不是数字,无法正确获取第二高得票的索引,导致parti取值返回NA。
  2. 提前slice(1:2)破坏原始数据:该操作会过滤掉其他政党的数据,导致sum(oy_2015)计算的是前两名得票之和,而非整个省份的总得票,不符合得票率的计算需求。

解决方案

以下两种方法均在summarise()内处理,保留原始数据集用于计算,同时正确提取Top2政党:

方案一:使用sort提取第二高得票值

mv_26 %>% 
  group_by(il_adi) %>% 
  summarise(
    win_party_2015 = parti[which.max(oy_2015)],
    win_party_p_2015 = max(oy_2015)/sum(oy_2015),
    # 提取第二高得票数量
    second_votes_2015 = sort(oy_2015, decreasing = TRUE)[2],
    # 匹配对应的政党(若有多个政党并列第二,会返回多个值,可按需处理)
    second_party_2015 = parti[oy_2015 == second_votes_2015]
  )

方案二:使用dplyr的nth函数

mv_26 %>% 
  group_by(il_adi) %>% 
  summarise(
    win_party_2015 = parti[which.max(oy_2015)],
    win_party_p_2015 = max(oy_2015)/sum(oy_2015),
    # 按得票降序排序后取第2个政党和得票
    second_party_2015 = nth(parti[order(-oy_2015)], 2),
    second_votes_2015 = nth(oy_2015[order(-oy_2015)], 2)
  )

方案三:使用Rfast的nth函数(正确参数)

mv_26 %>% 
  group_by(il_adi) %>% 
  summarise(
    win_party_2015 = parti[which.max(oy_2015)],
    win_party_p_2015 = max(oy_2015)/sum(oy_2015),
    # 用Rfast提取第二高得票值
    second_votes_2015 = Rfast::nth(oy_2015, k=2, descending=TRUE),
    second_party_2015 = parti[oy_2015 == second_votes_2015]
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:10:40