如何生成指示变量前的序列?风险分析数据集预处理需求
实现事件前n周期标记列的R方法
基础R实现(单序列场景)
针对你提供的单时间序列示例,可以通过定位事件位置、计算标记区间来生成目标列:
number_of_years = 5 year = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) indicator = c(0, 0, 0, 0, 0, 1, 0, 0, 0, 0) # 定位事件发生的索引位置 event_idx = which(indicator == 1) # 计算标记区间的起始索引(确保不小于1,避免越界) start_idx = max(1, event_idx - number_of_years + 1) # 初始化目标列并赋值 lag_column = rep(0, length(year)) lag_column[start_idx:event_idx] = 1 # 输出结果 data.frame(year, indicator, lag_column)
dplyr管道式实现(支持多国家分组场景)
如果你的数据集包含多个国家的时间序列,用dplyr的分组操作更方便:
library(dplyr) # 模拟多国家数据 df <- data.frame( country = rep(c("USA", "China"), each = 10), year = rep(1:10, 2), indicator = c(0,0,0,0,0,1,0,0,0,0, 0,0,1,0,0,0,0,0,0,0) ) number_of_years = 5 df <- df %>% group_by(country) %>% mutate( # 获取当前国家的事件发生年份 event_year = year[indicator == 1], # 标记事件前n年(含事件年)为1,其余为0 lag_column = ifelse( year >= (event_year - number_of_years + 1) & year <= event_year, 1, 0 ), # 处理无事件的国家(避免NA) lag_column = ifelse(is.na(lag_column), 0, lag_column) ) %>% ungroup() # 查看结果 print(df)
注意事项
- 如果某个国家没有发生事件(
indicator全为0),上述代码会将lag_column设为0,避免出现NA值; - 当事件发生在序列前n个周期内时,标记区间会自动从序列起始点开始,不会出现索引越界问题。
内容的提问来源于stack exchange,提问作者rulesforpower
相关产品推荐
相关产品推荐

