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

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)
)

已实现的功能代码

  1. 获取首次全注册年份(代码运行正确):
df_inc <- df %>% 
  group_by(ID) %>% 
  filter(row_number(values)==1)
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:20:34