如何在数据框中提取当天的首次观察?

时间:2019-05-15 08:04:47

标签: r timestamp

我有一个包含日期列和唯一ID的数据框。我只想提取每天的第一次观察。

我尝试使用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 :(得分:0)

尝试下面的代码。请注意,我已经编辑了您的示例数据。

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  

答案 1 :(得分:0)

这是一种使用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