基于选举数据集计算生成执政年份列表的R语言技术实现需求
解决R语言中生成执政年份范围变量的问题
我来帮你搞定这个生成ruling_year变量的需求!咱们可以用dplyr做数据分组和窗口计算,搭配purrr来生成年份序列,完美贴合你给出的规则。
具体步骤&代码
首先加载需要的包,然后一步步处理数据:
# 加载必备的包 library(dplyr) library(purrr) # 你的示例数据集 toy <- data.frame( election_year=c(1995,1999,2009,2014), election_country=rep("A",4)) # 核心处理逻辑 toy_processed <- toy %>% # 按国家分组,保证每个国家的选举年份独立计算 group_by(election_country) %>% mutate( # 获取下一次选举的年份,最后一行没有下一次选举会返回NA next_election = lead(election_year), # 按照规则计算执政结束年份: # 1. 有下一次选举且间隔≤5年 → 下一次选举前一年 # 2. 没有下一次选举/间隔超过5年 → 选举年份+4(保证最长执政5年) end_year = case_when( !is.na(next_election) & (next_election - election_year) <=5 ~ next_election - 1, TRUE ~ election_year + 4 ), # 生成年份序列并拼接成指定格式的字符串 ruling_year = map2_chr(election_year, end_year, ~paste(.x:.y, collapse = " - ")) ) %>% # 移除中间临时变量(可选,看你是否需要保留) select(-next_election, -end_year) # 查看最终结果 toy_processed
运行结果
执行上面的代码后,你会得到和期望完全一致的输出:
# A tibble: 4 × 3 # Groups: election_country [1] election_year election_country ruling_year <dbl> <chr> <chr> 1 1995 A 1995 - 1996 - 1997 - 1998 2 1999 A 1999 - 2000 - 2001 - 2002 - 2003 3 2009 A 2009 - 2010 - 2011 - 2012 - 2013 4 2014 A 2014 - 2015 - 2016 - 2017 - 2018
逻辑解释
- 分组处理:用
group_by(election_country)确保如果你的数据集有多个国家,每个国家的选举年份都是独立计算的,不会互相干扰。 - 获取下一次选举年份:
lead(election_year)是dplyr的窗口函数,能帮我们拿到当前行的下一行选举年份,最后一行因为没有下一行,会返回NA。 - 规则判断:
case_when完美实现了你要求的两个规则:正常情况用下一次选举前一年结束,缺失或者间隔超5年的话,就强制最长执政5年(从选举年到选举年+4,刚好5个年份)。 - 生成年份字符串:
map2_chr会遍历每一行的起始和结束年份,生成连续的年份序列,再用paste把它们用-拼接起来,最终得到你要的格式。
这个方案不仅适配你的示例数据,还能轻松扩展到多国家、有更多选举缺失情况的数据集哦!
内容的提问来源于stack exchange,提问作者MCS
相关产品推荐
相关产品推荐

