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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:01