У меня есть такой фрейм данных
ID <- c("111","111","112","112",
"113","113","114","114",
"115","116")
ACTION <- c("UA Created","UA Complete","UA Created","UA Complete",
"UA Created","UA Expired","UA Created","UA Expired",
"UA Created","UA Created")
Datetime <- c("2018-04-15 12:44:11","2018-04-17 12:44:11","2018-04-18 19:07:11","2018-04-19 21:11:09",
"2018-04-23 22:24:11","2018-04-23 22:44:11","2018-04-25 17:07:11","2018-05-05 21:11:09",
"2018-04-22 21:11:09", "2018-04-26 21:11:09")
STATUS <- c(NA,"Done",NA,"Done",
NA,NA,NA,NA,
NA,NA)
df <- data.frame(ID,ACTION,Datetime,STATUS)
df$Datetime <- as.POSIXct(df$Datetime,format="%Y-%m-%d %H:%M:%S")
Я пытаюсь создать столбец с именем "DURATION_DAYS" между двумя датами, сгруппированный по идентификатору. Я хочу вернуть только строку с ACTION = 'UA Complete' или '' UA Expired 'для того же идентификатора вместе с вычисленной продолжительностью.
Мой желаемый результат -
ID ACTION Datetime STATUS DURATION_DAYS
111 UA Complete 2018-04-17 12:44:11 Done 2.00000000
112 UA Complete 2018-04-19 21:11:09 Done 1.08608796
113 UA Expired 2018-04-23 22:44:11 NA 0.01388889
114 UA Expired 2018-05-05 21:11:09 NA 10.16942130
115 UA Created 2018-04-22 21:11:09 NA NA
116 UA Created 2018-04-26 21:11:09 NA NA
Я пытался использовать dplyr для этого, но почему-то не хватало логики
library(dplyr)
library(lubridate)
df1 <- df %>%
group_by(ID) %>%
mutate(DURATION_DAYS = as.numeric(difftime(dmy_hm(Datetime),
dmy_hm(Datetime)[1], units = 'days')))