R 计算药物依从性:累积药丸短缺

R 计算药物依从性:累积药丸短缺,r,cumulative-sum,R,Cumulative Sum,很难找到计算药物依从性的正确方法。知道不存在完美的解决方案,我想计算一个患者肯定不能服用药物的天数,因为他没有任何药物。每次开药我都要这样做 我有如下药房数据: x <- data.frame( patient_id = 1, issue_date = as.Date( "1990-01-01" ) + cumsum( c( 0, 35, 30, 25, 30 ) ), no_tablets = 60 ) patient_id issue_date no_tablets

很难找到计算药物依从性的正确方法。知道不存在完美的解决方案,我想计算一个患者肯定不能服用药物的天数,因为他没有任何药物。每次开药我都要这样做

我有如下药房数据:

x <- data.frame(
  patient_id = 1,
  issue_date = as.Date( "1990-01-01" ) + cumsum( c( 0, 35, 30, 25, 30 ) ),
  no_tablets = 60
)

  patient_id issue_date no_tablets
1          1 1990-01-01         60
2          1 1990-02-05         60
3          1 1990-03-07         60
4          1 1990-04-01         60
5          1 1990-05-01         60

x在您的示例中,该患者的药片供应量似乎继续超过两次补药之间的天数。如果没有您想要的输出的示例,我认为下面的脚本可能就足够了:

x <- data.frame(
  patient_id = c(rep(1, 5), rep(2, 5)),
  issue_date = c(rep(as.Date( "1990-01-01" ) + cumsum( c( 0, 35, 30, 25, 30 ) ), 2)),
  no_tablets = c(rep(60, 5), rep(31, 5))
)

y <- data.frame(
  patient_id = c(1, 2),
  pills_per_day = c(2, 1)
)

z <- merge(x, y, by = "patient_id")

library(data.table)
z <- data.table(z)
z[, days_excess := (no_tablets/pills_per_day) - ifelse(patient_id == shift(patient_id, 1, type = "lead"), 
                                                   -as.integer(issue_date - shift(issue_date, 1, type="lead")), 
                                                   NA)]

print(z)
   patient_id issue_date no_tablets pills_per_day days_excess
 1:          1 1990-01-01         60             2          -5
 2:          1 1990-02-05         60             2           0
 3:          1 1990-03-07         60             2           5
 4:          1 1990-04-01         60             2           0
 5:          1 1990-05-01         60             2          NA
 6:          2 1990-01-01         31             1          -4
 7:          2 1990-02-05         31             1           1
 8:          2 1990-03-07         31             1           6
 9:          2 1990-04-01         31             1           1
10:          2 1990-05-01         31             1          NA

x在您的示例中,该患者的药片供应量似乎继续超过两次补药之间的天数。如果没有您想要的输出的示例,我认为下面的脚本可能就足够了:

x <- data.frame(
  patient_id = c(rep(1, 5), rep(2, 5)),
  issue_date = c(rep(as.Date( "1990-01-01" ) + cumsum( c( 0, 35, 30, 25, 30 ) ), 2)),
  no_tablets = c(rep(60, 5), rep(31, 5))
)

y <- data.frame(
  patient_id = c(1, 2),
  pills_per_day = c(2, 1)
)

z <- merge(x, y, by = "patient_id")

library(data.table)
z <- data.table(z)
z[, days_excess := (no_tablets/pills_per_day) - ifelse(patient_id == shift(patient_id, 1, type = "lead"), 
                                                   -as.integer(issue_date - shift(issue_date, 1, type="lead")), 
                                                   NA)]

print(z)
   patient_id issue_date no_tablets pills_per_day days_excess
 1:          1 1990-01-01         60             2          -5
 2:          1 1990-02-05         60             2           0
 3:          1 1990-03-07         60             2           5
 4:          1 1990-04-01         60             2           0
 5:          1 1990-05-01         60             2          NA
 6:          2 1990-01-01         31             1          -4
 7:          2 1990-02-05         31             1           1
 8:          2 1990-03-07         31             1           6
 9:          2 1990-04-01         31             1           1
10:          2 1990-05-01         31             1          NA

x非常感谢您的回复。在我的例子中,患者每天必须服用2片药片,因此有时天数超过了一天的药片供应量。@Jasper我编辑了我的回答,添加了一个额外的患者,并为这两个患者每天添加了不同的药片量。再看一遍,我也删除了cumsum函数,只看了一下每个月的超额量。再次感谢Brandon。问题在于,当患者从先前过量的药物中剩下“库存”时,他就可以出现药物短缺。所以我想我需要做一些累积的事情。非常感谢你的回复。在我的例子中,患者每天必须服用2片药片,因此有时天数超过了一天的药片供应量。@Jasper我编辑了我的回答,添加了一个额外的患者,并为这两个患者每天添加了不同的药片量。再看一遍,我也删除了cumsum函数,只看了一下每个月的超额量。再次感谢Brandon。问题在于,当患者从先前过量的药物中剩下“库存”时,他就可以出现药物短缺。所以我想我需要做一些累积的事情。