如何按各国不同民主转型年份批量子集化国家-年份panel数据集
R面板数据按各国自定义时间阈值批量筛选方法
核心思路
将各国的民主转型年份整理为独立的对照映射表,通过匹配合并的方式自动完成全量筛选,不需要手动拼接大量逻辑判断条件。
操作步骤
步骤1:构建国家转型年份对照数据表
只需要整理一次即可长期复用,120个国家也只需要填一次对应关系:
transition_year <- data.frame( Country = c("A", "B", "C", "D", "E"), min_year = c(1965, 1988, 1997, 1994, 1997) )
注意:列名需要和你的原始数据集列名匹配,
min_year为对应国家需要保留的起始年份,使用数值格式不要加引号。
步骤2:批量筛选数据
提供两种常用实现方案:
方案1:base R 实现,不需要加载第三方包
# 把转型年份匹配到原始数据集 Data_with_min <- merge(Data, transition_year, by = "Country", all.x = TRUE) # 仅保留年份大于等于转型年份的观测 Data2 <- Data_with_min[Data_with_min$date >= Data_with_min$min_year, ] # 可选:删除不需要的min_year辅助列 Data2$min_year <- NULL
方案2:dplyr 实现,代码更简洁易读
library(dplyr) Data2 <- Data %>% # 匹配各国转型年份 left_join(transition_year, by = "Country") %>% # 批量筛选符合条件的观测 filter(date >= min_year) %>% # 移除辅助列 select(-min_year)
注意事项
如果你的原始数据集的国家列名为country_name、年份列名为year,请把上述代码中的列名替换为你实际使用的列名,同时保证年份类为数值型,避免字符型比较出错。
内容的提问来源于stack exchange,提问作者LL J
相关产品推荐
相关产品推荐

