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

如何用R基于美国众议院选举历史结果创建incumbency变量?

解决方案:创建基于往届选举结果的在任变量

要实现你需要的i变量(标记参选政党是否为上一届该选区的获胜党),核心是关联当前年份与上一年份同选区的获胜政党,以下是两种可行的实现方式:

方法一:利用lag()直接在原数据集内处理

这种方法无需额外创建辅助表,直接通过分组和滞后函数关联上一年的结果:

library(tidyverse)

# 你的模拟数据集
data <- data.frame(
  party=rep(1:2,100),
  district=rep(1:2,each=2,50),
  state=rep(1:2,each=4,25),
  year=rep(1:25,each=8)
) %>%
  mutate(voteshare=rnorm(200,mean=50,sd=10)) %>%
  group_by(year,state,district) %>%
  mutate(rank=dense_rank(desc(voteshare))) %>%
  # 开始生成i变量
  group_by(state, district, year) %>%
  # 标记当前年份该选区的获胜政党
  mutate(winning_party = ifelse(rank == 1, party, NA)) %>%
  # 按州-选区分组,提取上一年的获胜政党
  group_by(state, district) %>%
  mutate(prev_winner = lag(winning_party)) %>%
  # 生成最终的i变量
  mutate(i = case_when(
    year == 1 ~ NA_real_,          # 首届选举无过往数据,赋值NA
    party == prev_winner ~ 1,      # 当前政党是上届获胜党,赋值1
    TRUE ~ 0                       # 其余情况赋值0
  )) %>%
  ungroup()

逻辑说明

  1. 先在year-state-district分组内标记出当年的获胜政党;
  2. 切换到state-district分组后,用lag()将上一年的获胜政党值映射到当前年份的所有参选政党记录中;
  3. 通过case_when()完成最终的变量赋值,严格匹配你的需求。

方法二:创建辅助获胜党表后合并

这种方法逻辑更直观,先提取所有选区历年的获胜记录,再通过年份偏移合并到原数据集:

library(tidyverse)

# 模拟数据集(同之前的代码)
data <- data.frame(
  party=rep(1:2,100),
  district=rep(1:2,each=2,50),
  state=rep(1:2,each=4,25),
  year=rep(1:25,each=8)
) %>%
  mutate(voteshare=rnorm(200,mean=50,sd=10)) %>%
  group_by(year,state,district) %>%
  mutate(rank=dense_rank(desc(voteshare))) %>%
  ungroup()

# 第一步:提取每个州-选区-年份的获胜政党,并将年份+1(用于匹配下一年的参选记录)
winner_table <- data %>%
  filter(rank == 1) %>%
  select(state, district, year, prev_winning_party = party) %>%
  mutate(year = year + 1)

# 第二步:合并到原数据集并生成i变量
data <- data %>%
  left_join(winner_table, by = c("state", "district", "year")) %>%
  mutate(i = case_when(
    year == 1 ~ NA_real_,
    party == prev_winning_party ~ 1,
    TRUE ~ 0
  ))

逻辑说明

  1. 先筛选出所有年份的获胜政党记录,将年份加1后,该表的year字段正好对应原数据中需要匹配上届结果的年份;
  2. 通过left_join将上届获胜党信息关联到每个参选政党的记录中;
  3. 最后用case_when()完成变量赋值,结果与方法一完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:31