如何在R中依据ID与年份关联填充'Next Outcome'列?
在R中按ID分组填充下一年的Outcome值
核心方案(dplyr包)
先模拟你提到的Table 1结构数据,再通过分组排序后取后续行的Outcome值:
library(dplyr) # 模拟Table 1数据 df <- tibble( ID = c(1,1,1,2,2), Year = c(2020,2021,2022,2020,2021), Outcome = c("A", "B", "C", "X", "Y") ) # 生成Next Outcome列 df_result <- df %>% group_by(ID) %>% arrange(Year) %>% # 务必按年份升序排列,保证取到的是下一年的数据 mutate(`Next Outcome` = lead(Outcome)) %>% # lead()取分组内下一行的值,最后一行自动为NA ungroup()
运行后得到的df_result就是你要的Table 2效果:每个ID的最后一条记录Next Outcome为NA,其余行对应下一年的Outcome值。
大数据场景方案(data.table包)
如果你的数据集很大,用data.table效率更高:
library(data.table) setDT(df) df_result_dt <- df[order(Year), `Next Outcome` := shift(Outcome, type = "lead"), by = ID]
注意事项
- 必须先按
Year排序,否则lead()/shift()会取原始数据顺序的下一行,而非下一年的数据 - 如果存在年份缺失的情况,需要先补全年份(比如用
tidyr::complete())再执行上述操作
内容的提问来源于stack exchange,提问作者JH2021
相关产品推荐
相关产品推荐

