Цель:
У меня есть набор данных, df, который я хотел бы сгруппировать по идентификатору и найти продолжительность на основе определенных условий: Focus == True, Read == True, и ID! = ""
ID Date Focus Read
A 1/2/2020 5:00:00 AM True True
A 1/2/2020 5:00:05 AM True True
1/3/2020 6:00:00 AM True
1/3/2020 6:00:05 AM True
B 1/4/2020 7:00:00 AM True True
B 1/4/2020 7:00:02 AM True True
B 1/4/2020 7:00:10 AM True True
Мне бы хотелось получить такой вывод:
ID Duration
A 5 sec
B 10 sec
dput:
structure(list(ID = structure(c(2L, 2L, 1L, 1L, 3L, 3L, 3L), .Label = c("",
"A", "B"), class = "factor"), Date = structure(1:7, .Label = c("1/2/2020 5:00:00 AM",
"1/2/2020 5:00:05 AM", "1/3/2020 6:00:00 AM", "1/3/2020 6:00:05 AM",
"1/4/2020 7:00:00 AM", "1/4/2020 7:00:02 AM", "1/4/2020 7:00:10 AM"
), class = "factor"), Focus = structure(c(1L, 1L, 1L, 1L, 1L,
1L, 1L), .Label = "True ", class = "factor"), Read = structure(c(2L,
2L, 1L, 1L, 2L, 2L, 2L), .Label = c("", "True "), class = "factor")), class = "data.frame", row.names = c(NA,
-7L))
Что я пробовал:
df %>% group_by(ID)
mutate(Date = lubridate::mdy_hms(Date),
cond = Focus == "TRUE" & Read=="TRUE" & ID != "" ,
grp = cumsum(!cond)) %>%
filter(cond) %>%
group_by(grp) %>%
summarise(starttime = first(Date),
endtime = last(Date),
duration = difftime(endtime, starttime, units = "secs")) %>%
select(-grp)
Однако это не группировка по идентификатору, так как я не вижу этого в своих выходных данных.
Любое предложение приветствуется.