Фон
У меня есть набор данных: df, где я хотел бы сначала установить sh звездное время с первым экземпляром ' Соедините значение, а затем создайте конечное время, только , если разница между строками составляет , а не 60 секунд или меньше. Я также хотел бы отбросить повторяющиеся значения. Наконец, я бы хотел удалить все значения попыток . В конечном выводе должны быть только столбцы «Подключиться» и «Завершенный вызов».
Action Time
Attempt 3/12/2020 10:02:43 AM
Attempt 3/12/2020 10:02:48 AM
Connect 3/12/2020 10:02:49 AM
Ended call 3/12/2020 10:11:02 AM
Attempt 3/12/2020 10:11:24 AM
Connect 3/12/2020 10:11:24 AM
Ended call 3/12/2020 10:12:22 AM
Attempt 3/12/2020 10:12:34 AM
Connect 3/12/2020 10:12:34 AM
Ended call 3/12/2020 11:20:33 AM
Ended call 3/12/2020 11:20:37 AM
Attempt 3/12/2020 11:21:08 AM
Connect 3/12/2020 11:21:09 AM
Ended call 3/12/2020 12:01:13 PM
Ended call 3/12/2020 12:04:02 PM
Attempt 3/12/2020 1:06:10 PM
Connect 3/12/2020 1:06:12 PM
Ended call 3/12/2020 2:00:10 PM
Ended call 3/12/2020 2:04:51 PM
Attempt 3/12/2020 2:04:57 PM
Connect 3/12/2020 2:04:58 PM
Ended call 3/12/2020 2:50:24 PM
Ended call 3/12/2020 2:50:46 PM
Требуемый вывод
Connect Ended Call
3/12/2020 10:02:49 AM 3/12/2020 10:11:02 AM
3/12/2020 10:11:24 AM 3/12/2020 11:20:33 AM
3/12/2020 11:21:09 AM 3/12/2020 12:01:13 PM
3/12/2020 1:06:12 PM 3/12/2020 2:00:10 PM
3/12/2020 2:04:58 PM 3/12/2020 2:50:24 PM
Dput
df <- structure(list(Action = structure(c(2L, 2L, 3L, 4L, 2L, 3L, 4L,
2L, 3L, 4L, 4L, 2L, 3L, 4L, 4L, 2L, 3L, 4L, 4L, 2L, 3L, 4L, 4L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("", "Attempt", "Connect",
"Ended call"), class = "factor"), Time = structure(c(4L, 5L,
6L, 7L, 8L, 8L, 9L, 10L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 2L,
3L, 17L, 18L, 19L, 20L, 21L, 22L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = c("", "3/12/2020 1:06:10 PM", "3/12/2020 1:06:12 PM",
"3/12/2020 10:02:43 AM", "3/12/2020 10:02:48 AM", "3/12/2020 10:02:49 AM",
"3/12/2020 10:11:02 AM", "3/12/2020 10:11:24 AM", "3/12/2020 10:12:22 AM",
"3/12/2020 10:12:34 AM", "3/12/2020 11:20:33 AM", "3/12/2020 11:20:37 AM",
"3/12/2020 11:21:08 AM", "3/12/2020 11:21:09 AM", "3/12/2020 12:01:13 PM",
"3/12/2020 12:04:02 PM", "3/12/2020 2:00:10 PM", "3/12/2020 2:04:51 PM",
"3/12/2020 2:04:57 PM", "3/12/2020 2:04:58 PM", "3/12/2020 2:50:24 PM",
"3/12/2020 2:50:46 PM"), class = "factor")), class = "data.frame", row.names = c(NA,
-46L))
Я пробовал это : Талантливый участник из Stack помог мне, и это прекрасно работает, за исключением моего большого набора данных, у меня есть случаи, когда некоторые даты не записываются:
df2<-df %>%
mutate(Time1 = mdy_hms(Time)) %>%
group_by(grp = cumsum(Action == 'Connect')) %>%
mutate(Diff = difftime(Time1, lag(Time1), unit = 'sec'),
Diff = case_when(any(Diff <=60) ~ 60, TRUE ~ as.numeric(Diff))) %>%
filter(Action == 'Connect'|Diff >60) %>%
ungroup %>%
filter(!duplicated(rleid(Action))) %>%
select(Action, Time)
library(data.table)
df %>%
mutate(rn = rowid(Action)) %>%
pivot_wider(names_from = Action, values_from = Date) %>%
select(-rn)
Любая помощь приветствуется.