R中是否有类似Stata stset的生存分析数据集预处理函数?
对标Stata stset功能的R生存数据预处理方案
R的生存分析生态已经实现了完全对标Stata stset的功能,核心依赖survival包,针对你提出的错误失效标记清洗需求,处理方案如下:
核心工具说明
survival包内置的tmerge()函数完全覆盖stset的数据集预处理能力,支持计数过程格式(start-stop格式)构造、时变协变量处理、左截断/右删失设置等全场景需求- 配合
dplyr的分组操作,可以快速实现你需要的「清理ID下提前标记的错误失效事件,仅保留最后一段从删失到真实失效的有效序列」需求
你的场景的通用处理代码
第一步:构造示例数据
library(dplyr) library(survival) raw_data <- tibble( id = c(1,1,1,2,2,2,2,2), start = c(0,1,3,0,1,3,4,6), end = c(1,3,6,1,3,4,6,7), failure = c(0,0,1,1,1,0,0,1), x1 = c(0,0,0,1,1,1,1,1) )
第二步:清洗错误失效标记
逻辑是按ID分组,剔除所有最后一次失效事件之前的错误失效标记行,仅保留最后一段连续的有效观测:
clean_data <- raw_data %>% group_by(id) %>% # 定位到该ID最后一次failure从0切换为1的节点,保留该节点之前的连续删失段+节点本身 mutate( # 标记所有failure=1且不是最后一行的错误行 error_flag = failure == 1 & row_number() != n(), # 找到所有错误行之后的第一个行位置,从该位置开始保留 keep_start = ifelse(any(error_flag), max(which(error_flag)) + 1, 1) ) %>% filter(row_number() >= keep_start) %>% select(-error_flag, -keep_start) %>% ungroup()
运行后得到的clean_data和你给出的预期输出完全一致,可直接输入coxph()函数建模:
# 建模示例 cox_model <- coxph(Surv(start, end, failure) ~ x1, data = clean_data)
对标stset的标准数据构造
如果你需要实现Stata里stset的标准区间数据构造逻辑,直接用tmerge()即可,用法和stset参数对应:
st_data <- tmerge( data1 = raw_data %>% distinct(id, x1), # 基线特征表 data2 = raw_data, # 时间点事件表 id = id, failure = event(end, failure), # 对应stset的failure事件设置 tstart = start, tstop = end )
内容的提问来源于stack exchange,提问作者S.X
相关产品推荐
相关产品推荐

