R语言如何按id分组对响应变量实现一阶时间滞后处理
R实现分组内响应变量一阶滞后匹配
你需要实现的逻辑是:按id分组后以year为时间序,将当期points匹配下一期的result值,剔除每个分组无下一期结果的最后一行,以下是两种常用实现方法:
方法1:dplyr实现(适合常规分析场景)
library(dplyr) df_processed <- df %>% group_by(id) %>% # 组内按年份升序排列,避免时间顺序错位 arrange(year, .by_group = TRUE) %>% # result取下一期的值 mutate(result = lead(result, n = 1)) %>% # 剔除无匹配下一期result的行 filter(!is.na(result)) %>% ungroup()
运行后得到的结果和你给出的目标数据框结构完全一致。
方法2:data.table实现(适合大数据量场景,运行速度更快)
library(data.table) setDT(df) df_processed <- df[order(id, year), # 分组对result做向前一位偏移(取下一期值) result := shift(result, n = 1, type = "lead"), by = id][!is.na(result)]
注意:处理前请确认每个
id分组内的year无重复、无乱序,否则会出现值匹配错误,直接影响后续回归结果的准确性。
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

