繁体   English   中英

根据条件改变时间变量

[英]Mutate time variables with conditions

我一直在尝试使用两个日期和条件形成一个新变量,但没有成功。 具体来说,我有一个这样的 dataframe:

  ID    MedicationDate   NumberOfPackages
 X001   2011-01-12             3    
 X001   2011-01-12             3    
 X001   2011-01-12             3    
 X001   2013-02-23             1    
 X001   2013-03-02             1    

其中 MedicationDate 是购买药品的日期,NumberOfPackages 是该日期购买的包裹数量。 我需要的是一个新变量,说明药物能持续多久,假设一个 package 能持续一个月。 当在最后一个包结束后购买包时,情况很简单,并且新的变量值符合预期。 我用我的代码得到了这个结果,但在最后一行中,结果并不像预期的那样:

  ID    MedicationDate   NumberOfPackages     LastDate
 X001   2011-01-12             3             2011-04-12
 X001   2011-01-12             3             2011-04-12
 X001   2011-01-12             3             2011-04-12
 X001   2013-02-23             1             2013-03-23
 X001   2013-03-02             1             2013-04-02

由于最后一种药物是在前一种药物用完之前购买的,因此最后日期应该是 2013-04-23。 我可以通过运行这段代码得到正确的答案:

as.Date("2013-03-02") %m+% months(1) %m+% days(as.numeric(difftime(as.Date("2013-03-23"),as.Date("2013-03-02"), units = "days")))

但是尝试在整个 dataframe 的条件下使用它似乎不起作用。

library(lubridate)

test <- test %>%
  group_by(ID) %>%
  arrange(MedicationDate) %>%
  mutate(LastDate =
           case_when(
             lag(MedicationDate) == MedicationDate | is.na(lag(LastDate)) | lag(LastDate) <= MedicationDate ~ as.Date(MedicationDate) %m+% months(NumberOfPackages),
             TRUE ~ as.Date(MedicationDate) %m+% months(NumberOfPackages) %m+% days(as.numeric(difftime(as.Date(lag(LastDate)),as.Date(MedicationDate), units = "days"))) 
           ) 
  ) 

似乎 LastDate 值总是由第一个公式计算得出。 我感谢有关如何找到所需值的任何帮助。

您可以像这样使用months

library(lubridate)
library(dplyr)
df %>% 
  mutate(LastDate = MedicationDate + months(NumberOfPackages))

#     ID MedicationDate NumberOfPackages   LastDate
# 1 X001     2011-01-12                3 2011-04-12
# 2 X001     2011-01-12                3 2011-04-12
# 3 X001     2011-01-12                3 2011-04-12
# 4 X001     2013-02-23                1 2013-03-23
# 5 X001     2013-03-02                1 2013-04-02

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM