R脚本需求:按ID提取首次连续全注册年份的最后一行(Cox回归)
问题:识别Cox回归数据中首次连续全注册阶段的结束年份
背景与需求
正在为Cox回归模型整理数据,数据集记录了参与者在本省的所有注册年份,包含每年的注册天数变量。需要确定两个关键时间点:
- 参与者首次全注册(≥365天)的起始年份
- 首次连续全注册阶段的最后年份
注:部分参与者曾离开本省后又返回并完成至少一年全注册,但本次分析中,随访需在首次离开时结束——因为无法追踪其在外期间的健康结局。
已完成的预处理步骤
- 已按
ID、年份对数据集排序 - 已移除注册天数不足365天的观测
测试数据集与现有代码
测试数据集
df <- data.frame( ID = c(1,1,1,1,1,2,2,2,2,2,2,3,3,3,3), values = c(1996,1998,1999,2000,2001,2001,2002,2003,2004,2007,2008,2004,2005,2006,2007) )
已实现的功能代码
- 获取首次全注册年份(代码运行正确):
df_inc <- df %>% group_by(ID) %>% filter(row_number(values)==1)
- 获取所有全注册记录的最后年份(未考虑年份连续性):
df_lastoverall <- df %>% group_by(ID) %>% filter(row_number(values)==n())
该代码返回结果:ID1最后年份为2001,ID2为2008,ID3为2007——不符合需求。
目标与失败尝试
需要识别从起始年份开始的首次连续全注册阶段的最后年份,预期结果:
- ID1:1996(首次注册后就离开,无后续连续年份)
- ID2:2004(2001-2004连续,2007-2008属于返回后的阶段,不计入)
- ID3:2007(2004-2007全程连续)
尝试了以下代码但未成功:
df_last <- df %>% group_by(ID) %>% filter(row_number(values)[cumsum(c(1, diff(values)!=1))]) # OR df_last <- df %>% group_by(ID) %>% filter(row_number(values)==max(values[cumsum(c(1, diff(values)!=1))]))
内容的提问来源于stack exchange,提问作者Jac
相关产品推荐
相关产品推荐

