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。问题在于,当患者从先前过量的药物中剩下“库存”时,他就可以出现药物短缺。所以我想我需要做一些累积的事情。