如何才能按小时对数据进行分组并保留带有时间和日期的字段(“%Y-%m-%d%H:%M:%S”)?

时间:2019-12-11 17:27:09

标签: r dplyr lubridate

我有10分钟的数据,试图将其汇总为每小时的数据。我正在使用POSIXct格式的时间字段。我发现了一个类似的问题here。我想按小时对数据进行分组,但是要保留一年中每小时的POSIXct格式的字段(“%Y-%m-%d%H:%M:%S”)。另外,我希望保留我原始数据框中的所有字段,但我要使用dplyr进行汇总的内容除外。我在使用group_by_at时遇到问题,这引发了以下错误:

  

as.POSIXlt.default(x,tz = tz(x))中的错误:不知道如何   将“ x”转换为“ POSIXlt”类

当我尝试仅使用group_by时,它可以工作,但是将ymd_hms格式转换为%h。按小时分组时,是否可以保持此格式完整?是否有更有效的方法将十分钟数据分组为小时格式?

以下是有效示例,但删除了ymd_hms格式:

summary_df <- long_df %>%
  group_by(hour = lubridate::hour(time), discrete_variable) %>%
  summarise(max_continuous_variable = max(continuous_variable))

2 个答案:

答案 0 :(得分:0)

我问了一个能够提供对我有用的答案的同事。我想分享成功的结果,以防与他人相关。分组后使用摘要并应用min(time)可以保留具有“%Y-%m-%d%H:%M:%S”的时间字段。

summary_df <- long_df %>%
  group_by(hour = lubridate::hour(time), discrete_variable) %>%
  summarise(max_continuous_variable = max(continuous_variable),
            time = min(time))

答案 1 :(得分:0)

为此,我建议lubridate::floor_date。它将四舍五入到最后一个小时,为您提供分组的日期时间。

summary_df <- long_df %>%
  group_by(hour = lubridate::floor_date(time, "1 hour"), discrete_variable) %>%
  summarise(max_continuous_variable = max(continuous_variable))