Как отфильтровать данные по последней дате группы дат? - PullRequest
1 голос
/ 03 марта 2020

я знаю, что мой вопрос не так ясен, как следовало бы, поэтому я надеюсь, что мое объяснение сделает его более понятным. У меня есть такие данные:

# total_call data
call_id | from_number | retrieved_date
1         1             2020-01-12 12:03:34
2         1             2020-01-12 12:06:34
3         2             2020-01-15 13:02:40
4         2             2020-01-15 13:05:40 
5         1             2020-01-12 13:09:34

Я хочу сгруппировать вызовы по переменным from_number и retrieved_date, время которых должно быть в течение 1 часа с самого раннего момента. Через 1 час он принадлежит новой группе. Затем я хочу отфильтровать последнее время каждой группы. Это результат, который я хочу:

# total_call data
call_id | from_number | retrieved_date
2         1             2020-01-12 12:06:34
4         2             2020-01-15 13:05:40 
5         1             2020-01-12 13:09:34

Спасибо за ваше внимание. Я с нетерпением жду вашего ответа.

1 Ответ

1 голос
/ 03 марта 2020

Мы конвертируем retrieved_date в POSIXct формат, arrange данные и создаем новую группу, когда текущий retrieved_date больше, чем предыдущий retrieved_date более чем на час, и выбираем строку с max retrieved_date.

library(dplyr)

df %>%
  mutate(retrieved_date = lubridate::ymd_hms(retrieved_date)) %>%
  arrange(from_number, retrieved_date) %>%
  group_by(from_number) %>%
  group_by(gr = cumsum(difftime(retrieved_date, lag(retrieved_date, 
            default = first(retrieved_date)), units = "hours") > 1),add = TRUE) %>%
   slice(which.max(retrieved_date)) %>%
   ungroup() %>%
   select(-gr)

# A tibble: 3 x 3
#  call_id from_number retrieved_date     
#    <int>       <int> <dttm>             
#1       2           1 2020-01-12 12:06:34
#2       5           1 2020-01-12 13:09:34
#3       4           2 2020-01-15 13:05:40

данные

df <- structure(list(call_id = 1:5, from_number = c(1L, 1L, 2L, 2L, 
1L), retrieved_date = structure(c(1L, 2L, 4L, 5L, 3L), 
.Label = c("2020- 01-12 12:03:34","2020-01-12 12:06:34", "2020-01-12 13:09:34", 
"2020-01-15 13:02:40", "2020-01-15 13:05:40"), class = "factor")), 
class = "data.frame", row.names = c(NA, -5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...