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

如何按组计算处方data.frame的续药剩余剂量并识别停药

问题描述

现有一个存储同一药物处方信息的data.frame,包含字段:

  • idnr:患者唯一标识
  • daily_doses:每日剂量
  • filldate:处方日期
    每一行对应一次处方,数据已按idnr和filldate排序,每个患者对应多条处方记录。

目标

  1. 生成变量doses_left_at_time_of_subsequent_refill,表示下次续药时的剩余剂量(无后续续药时该值为-Inf)
  2. 识别治疗中断:定义为后续续药时剩余剂量小于-30,中断日期通过公式filldate + daily_doses + lag(doses_left_at_time_of_subsequent_refill)计算,患者可能存在多个中断日期

计算规则

  • 提前续药(续药日期早于当前剂量覆盖天数):假设当前剂量在下次用药前已用完,按规则计算剩余剂量
  • 延迟续药(续药日期晚于当前剂量覆盖天数):直接计算剩余剂量,不做调整

示例数据

原始数据预览

idnr     daily_doses     filldate
1.       10            2000-01-01
1.       10            2000-01-12
1.       10            2000-01-15
1.       10            2000-01-20
1.       10            2002-03-21
1.       10            2002-03-30
1.       10            2002-04-20
2.       10            2004-05-01
2.       20            2004-05-11
2.       10            2004-05-24
2.       10            2004-06-01
3.       20            2000-01-01
3.       10            2010-03-04
3.       10            2010-03-04
3.       10            2010-03-04
3.       10            2010-03-08
3.       10            2012-07-08
3.       10            2012-07-18
3.       10            2012-07-30
3.       10            2012-08-15
3.       10            2012-09-25

可直接运行的data.frame代码

data.frame(
         idnr = c(1L,1L,1L,1L,1L,1L,1L,2L,2L,2L,
                  2L,3L,3L,3L,3L,3L,3L,3L,3L,3L,3L),
  daily_doses = c(10L,10L,10L,10L,10L,10L,10L,10L,
                  20L,10L,10L,20L,10L,10L,10L,10L,10L,10L,10L,10L,10L),
     filldate = as.Date(c("2000-01-01","2000-01-12","2000-01-15",
                  "2000-01-20","2002-03-21","2002-03-30","2002-04-20",
                  "2004-05-01","2004-05-11","2004-05-24","2004-06-01",
                  "2000-01-01","2010-03-04","2010-03-04","2010-03-04","2010-03-08",
                  "2012-07-08","2012-07-18","2012-07-30","2012-08-15",
                  "2012-09-25"), format = "%Y-%m-%d")
)

期望输出
idnr     daily_doses     filldate    doses_left_at_time_of_subsequent_refill
1.       10            2000-01-01       -1
1.       10            2000-01-12       7
1.       10            2000-01-15       12
1.       10            2000-01-20       -769
1.       10            2002-03-21       1
1.       10            2002-03-30       10
1.       10            2002-04-20       -Inf
2.       10            2004-05-01       0
2.       20            2004-05-11       7
2.       10            2004-05-24       11
2.       10            2004-06-01       -Inf
3.       20            2000-01-01       -3715
3.       10            2010-03-04       10
3.       10            2010-03-04       20
3.       10            2010-03-04       26
3.       10            2010-03-08       -817
3.       10            2012-07-08       0
3.       10            2012-07-18       -2
3.       10            2012-07-30       -6
3.       10            2012-08-15       -31
3.       10            2012-09-25       -Inf

已尝试方法及问题
  • 使用lag()函数偏移filldate:仅能处理每组前一行,处方多的患者处理效率低
  • 使用cumsum()函数:会出现已中断治疗周期的剂量累积问题,而这些剂量不应计入新周期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:00:39