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

如何生成指示变量前的序列?风险分析数据集预处理需求

实现事件前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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:16