【问题标题】:How to extract first observation of the day in dataframe?如何在数据框中提取当天的第一次观察?
【发布时间】:2019-10-02 07:17:19
【问题描述】:

我有一个包含日期列和唯一 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

【问题讨论】:

  • 尝试df %&gt;% group_by(lubridate::ymd(date)) %&gt;% slice(1)如果时间无序则在slice之前使用arrange

标签: r timestamp


【解决方案1】:

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

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  

【讨论】:

    【解决方案2】:

    这是一种使用 stats 包中的 aggregate 的方法,同时编辑您的数据集定义:

    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
    

    【讨论】:

      猜你喜欢
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多