首页 > 解决方案 > 跟踪患者何时可能没有药物

问题描述

我一直坚持这一点,我可以利用社区的一些见解。假设由于不寻常的情况,患者按不规律的时间表接受药物:

Patient_Receiving_Schedule <- tibble(Medicine_Received = c(ymd("2019-01-01"), ymd("2019-01-20"), ymd("2019-02-01"), ymd("2019-06-01"), ymd("2019-06-15")),
                                        Days_of_Medicine_Received = c(30,30,30,30,30))

在某些时候,患者手头上的药物会从先前的货物中过剩,而在其他一些时候,患者会因为货物之间的时间太长而没有药物或过期。理想的输出是这样的:

Patient_Receiving_Schedule <- tibble(Medicine_Received = c(ymd("2019-01-01"), ymd("2019-01-20"), ymd("2019-02-01"), ymd("2019-06-01"), ymd("2019-05-15")),
                                        Days_of_Medicine_Received = c(30,30,30,30,30),
                                        Days_of_Medicine_Available = c(30,41,59,30,46),
                                        Notes = c("","","","Patient was 31 days overdue for medication",""))

Days_of_Medicine_Available 有点像 Medicine_Received 日期与 Days_of_Medicine_Received 之间的累积总和,但有规则,因为对 Days_of_Medicine_Available 的负值求和没有任何意义。

有没有办法通过 lag() 调用和一些围绕可用药物天数的累计值的逻辑来做到这一点?

非常感谢任何提示。

标签: rdplyrlubridate

解决方案


你能使用一个逻辑,如果x在上次发货后的天数内没有收到药物,那么我们需要重新Days_of_Medicine_Available计算吗?

如果是,那么您可以在此示例中使用以下内容,x = 30但您实际上可以将其设置为任何值。

library(dplyr)

Patient_Receiving_Schedule %>%
  group_by(grp = cumsum(Medicine_Received - lag(Medicine_Received, default = first(Medicine_Received)) > 30)) %>%
  mutate(Days_of_Medicine_Available = cumsum(Days_of_Medicine_Received) - as.integer(Medicine_Received - first(Medicine_Received))) %>%
  ungroup() %>%
  select(-grp)

#  Medicine_Received Days_of_Medicine_Received Days_of_Medicine_Available
#  <date>                                <dbl>                      <dbl>
#1 2019-01-01                               30                         30
#2 2019-01-20                               30                         41
#3 2019-02-01                               30                         59
#4 2019-06-01                               30                         30
#5 2019-06-15                               30                         46

推荐阅读