R: Выберите первое вхождение по времени для нескольких идентификаторов - PullRequest
0 голосов
/ 05 февраля 2019

Для многих уникальных идентификаторов у меня есть несколько событий (отметок времени) для отдельных дат - для каждого идентификатора я хочу получить строку для первого события каждого дня (самое раннее появление в тот день).

Попытался использовать dplyr для группировки и фильтрации, но не смог просто извлечь первое (временное) событие для каждого дня для всех идентификаторов.

Пример данных:

    df <- data_frame("DateTime" = c("2018-03-04 16:10:00", "2018-03-04 16:15:00", 
                     "2018-03-04 16:30:00", "2018-03-04 16:40:00", "2018-03-05 16:45:00", 
                     "2018-03-07 16:12:00", "2018-03-07 17:00:00", "2018-03-07 18:12:00"), 
                     "ID" = c("A", "A", "B", "B", "B", "C", "C", "C"))

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я думаю, это приведет вас туда, где вы хотите быть:

library(tidyverse)

df %>%
  group_by(ID, lubridate::date(DateTime)) %>%
  arrange(DateTime) %>%
  slice(1) %>%
  ungroup() %>%
  select(DateTime, ID)

# A tibble: 4 x 2
  DateTime            ID   
  <chr>               <chr>
1 2018-03-04 16:10:00 A    
2 2018-03-04 16:30:00 B    
3 2018-03-05 16:45:00 B    
4 2018-03-07 16:12:00 C  
0 голосов
/ 05 февраля 2019

Во-первых, вам нужно отформатировать DateTime как дату-время, а не как символ.lubridate::ymd_hms полезно для этого (при условии, что ваши даты - ymd).

Далее, конвертируйте DateTime в дату.Теперь вы можете group_by ID и дату, затем filter для минимума DateTime.

Наконец, один из способов получить время - отформатировать, используя strftime.

library(dplyr)
library(lubridate)

df %>% 
  mutate(DateTime = ymd_hms(DateTime), 
         Date = as_date(DateTime)) %>% 
  group_by(Date, ID) %>% 
  filter(DateTime == min(DateTime)) %>% 
  ungroup() %>% 
  mutate(Time = strftime(DateTime, "%H:%M:%S", tz = "UTC"))

Результат:

# A tibble: 4 x 4
  DateTime            ID    Date       Time    
  <dttm>              <chr> <date>     <chr>   
1 2018-03-04 16:10:00 A     2018-03-04 16:10:00
2 2018-03-04 16:30:00 B     2018-03-04 16:30:00
3 2018-03-05 16:45:00 B     2018-03-05 16:45:00
4 2018-03-07 16:12:00 C     2018-03-07 16:12:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...