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

如何在DataFrame中按组创建递归滚动基线评分变量?

滚动基线评分(Roving Baseline Score)的分组计算问题

我有一份包含每位患者多个临床结局观测值的数据集,观测时间点间隔不固定。需要为临床结局创建**滚动基线评分(roving baseline score)**变量,规则是:每当至少90天后的首个时间点确认评分出现上升或下降时,该基线评分就会更新。

示例数据集

library(tidyverse)

df <- tibble(
  patID  = c("1", "1", "1", "1", "1", "1", "2", "2", "3", "3", "3", "3", "3", "3"),     
  time_point = c("1", "2", "3", "4", "5", "6", "1", "2", "1", "2", "3", "4", "5", "6"),
  date = as.Date(c("2020-01-01", "2020-05-01", "2020-06-01", "2020-09-01", "2021-01-01", "2021-05-01", "2020-01-01", "2020-05-01", "2020-01-01", "2020-02-01", "2020-03-01", "2020-06-01", "2020-10-01", "2021-04-01")),
  score = c("300", "100", "100", "100", "200", "200", "600", "400", "300", "200", "200", "100", "400", "300"))

期望输出

期望得到的基线评分向量如下:

baseline = c("300", "300", "300", "100", "100", "200", "600", "600", "300", "300", "300", "200", "200", "300") 

规则说明

  • 患者1:评分在时间点2从300降至100,该下降可在时间点4(距时间点2至少90天的最近时间点)确认,因此时间点4的新基线为100;时间点6确认评分相对最新基线上升,新基线更新为200。
  • 患者2:仅有2个时间点,无法确认基线变化,基线保持初始值。
  • 患者3:评分在时间点2降至200,距该时间点至少90天的最近时间点是时间点4,确认下降后更新基线为200;时间点5评分升至400,距该时间点至少90天的最近时间点是时间点6,确认上升后更新基线为300。

遇到的问题

我尝试用for循环创建该变量,但不知道如何按患者分组处理。后续尝试用sapply编写代码,却出现「argument is of length 0」错误,尝试的代码如下:

df_baseline <- df %>%
  group_by(patID) %>%
  mutate(baseline = lag(score, default = first(score)),
         closest_index_90 = sapply(1:n(), function(i) {
           valid_indices <- which(date[i]+90 <= date[(i+1):n()])
           if (length(valid_indices)>0) {return(first(valid_indices) + i)} 
           else {return(NA)}
         }),
         baseline = sapply(1:n(), function(i) {
           if (score[i:closest_index_90[i]] > baseline[i - 1] | score[i:closest_index_90[i]] < baseline[i - 1]) {return(score[which.min(abs(score[i:closest_index_90[i]]-baseline[i-1]))])}
           else {return(baseline[i-1])}}))

我刚接触R语言,对for循环和sapply函数的使用能力有限,未找到针对性解法,恳请帮助!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:18:14