Как извлечь первое наблюдение дня в датафрейме? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть этот фрейм данных, содержащий столбец даты и уникальный идентификатор. Я просто хотел бы извлечь первое наблюдение каждого дня.

Я пытался использовать пакет dpylr (агрегатная функция) и функцию даты, но я все еще новичок в R. Я также безуспешно пытался найти ответ на этом форуме. Спасибо заранее за ваше возвращение!

Вот ситуация:

df <- as.data.frame(c(2013-01-12 07:30:00, 2013-01-12 12:40:00, 2013-01-16 06:50:00, 2013-01-16 15:10:00, 2013-01-14 11:20:00, 2013-01-14 08:15:00),
      c(A,B,E,F,C,D)) 

Результат должен быть:

2013-01-12 07:30:00 A 
2013-01-14 08:15:00 D
2013-01-16 06:50:00 E

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Вот подход, использующий aggregate из пакета stats, также редактирующий определение вашего набора данных:

df <- data.frame(times=strptime(c('2013-01-12 07:30:00', '2013-01-12 12:40:00', 
                                  '2013-01-16 06:50:00', '2013-01-16 15:10:00', 
                                  '2013-01-14 11:20:00', '2013-01-14 08:15:00'), 
                                  format = "%Y-%m-%d %H:%M:%S"), 
                                  id=c('A','B','E','F','C','D'))
df$day <- as.Date(df$times, format='%Y-%m-%d') #create a day column
aggregate(times ~ day, data = df, FUN='min')

#  day               times
# 1 2013-01-12 2013-01-12 07:30:00
# 2 2013-01-14 2013-01-14 08:15:00
# 3 2013-01-16 2013-01-16 06:50:00
0 голосов
/ 20 мая 2019

Попробуйте код ниже.Обратите внимание, что я отредактировал данные вашего примера.

library(dplyr)

    df <- data.frame(date = as.POSIXct(c("2013-01-12 07:30:00",
                                         "2013-01-12 12:40:00",
                                         "2013-01-16 06:50:00",
                                         "2013-01-16 15:10:00",
                                         "2013-01-14 11:20:00",
                                         "2013-01-14 08:15:00")),
                     id = letters[1:6]) 

df %>% 
  group_by(as.Date(date)) %>% 
  filter(date == min(date))

Результат должен выглядеть следующим образом:

# A tibble: 3 x 3
# Groups:   as.Date(date) [3]
  date                id    `as.Date(date)`
  <dttm>              <fct> <date>         
1 2013-01-12 07:30:00 a     2013-01-12     
2 2013-01-16 06:50:00 c     2013-01-16     
3 2013-01-14 08:15:00 f     2013-01-14  
...