[英]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.