R语言如何生成面板数据中事件发生前一年的标识变量pre_event
解决方案
核心逻辑是先定位每个国家事件首次发生的年份,仅将该年份的前一年标记为1,其余年份均为0,完美匹配你的需求。
示例数据适配代码
针对你给出的country/year/event结构的示例数据,修改后代码如下:
library(dplyr) dat %>% group_by(country) %>% arrange(country, year) %>% # 提取每个国家事件首次发生的年份 mutate(event_start = min(year[event == 1], na.rm = TRUE), # 仅事件起始年前一年标1,其余为0 pre_event = as.integer(year == event_start - 1)) %>% select(-event_start) # 可选删除中间辅助列
真实数据适配代码
针对你提供的真实数据(国家列country_name、事件列internalconflict),调整列名即可直接使用:
library(dplyr) real_dat %>% ungroup() %>% group_by(country_name) %>% arrange(country_name, year) %>% mutate(conflict_start = min(year[internalconflict == 1], na.rm = TRUE), # 兼容从未发生事件的国家,自动返回0无NA pre_event = as.integer(is.finite(conflict_start) & year == conflict_start - 1)) %>% select(-conflict_start)
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

