簡體   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