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

在R语言中计算患者治疗结束时间的技术实现问询

解决方案:计算患者治疗的开始与结束时间

核心修正逻辑:结束时间需要连续检查记录,一旦出现不符合条件的条目,后续记录不再纳入判断,而非全局查找所有符合条件的最大V2。以下是基于dplyr的实现代码:

library(dplyr)

# 处理数据逻辑
df_processed <- df %>%
  group_by(Patient) %>%
  # 提取患者首次就诊的初始治疗方案
  mutate(initial_T = first(T1[V1 == 1])) %>%
  # 计算开始时间:首次就诊满足T1=T2且R2为Response时,start为对应V2
  mutate(start = ifelse(V1 == 1 & T1 == T2 & R2 == "Response", V2, NA)) %>%
  # 将start值填充至该患者所有行,方便后续判断
  fill(start, .direction = "downup") %>%
  # 标记当前记录是否符合结束时间的判断条件
  mutate(valid = !is.na(start) & R2 %in% c("Response", "Death") & T1 == initial_T) %>%
  # 生成连续有效记录的分组:一旦出现无效记录,后续组号递增
  mutate(valid_group = cumsum(!valid)) %>%
  # 仅保留从开头连续有效的记录组(valid_group=0)
  filter(valid_group == 0) %>%
  # 取该组最后一个V2作为结束时间
  mutate(end = last(V2)) %>%
  # 合并回原始数据,保留所有行
  right_join(df, by = names(df)) %>%
  group_by(Patient) %>%
  # 填充所有行的start和end值
  fill(start, end, .direction = "downup") %>%
  ungroup() %>%
  # 移除中间辅助列
  select(-initial_T, -valid, -valid_group)

逻辑说明

  1. 分组处理:按Patient分组,确保每个患者的治疗时间计算独立进行。
  2. 初始方案提取:获取每个患者首次就诊(V1=1)时的治疗方案initial_T,作为后续判断的基准。
  3. 开始时间计算:与原有逻辑一致,仅在首次就诊满足T1=T2且R2="Response"时标记开始时间,并用fill填充至该患者所有行。
  4. 有效记录标记:标记符合结束时间判断条件的记录(有开始时间、R2为Response/Death、T1与初始方案一致)。
  5. 连续有效分组:通过cumsum(!valid)生成分组,确保仅保留从开头连续有效的记录,中途出现无效记录则终止判断。
  6. 结束时间确定:取连续有效记录的最后一个V2作为该患者的结束时间,再填充至所有行。

验证结果

  • 第一个示例中:
    • Dave: start=150,end=568
    • Angel: start=NA,end=NA
    • Joe: start=150,end=150
    • Cara: start=150,end=375
  • 补充示例中的Tanya:start=150,end=375(符合预期,而非错误的600)

内容的提问来源于stack exchange,提问作者rstudio_noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:55:03