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

How can can I group data by hour and retain the field with time and date ("%Y-%m-%d %H:%M:%S")?

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

Error in as.POSIXlt.default(x, tz = tz(x)) : do not know how to convert 'x' to class “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))

我问了一位同事,他提供了对我有用的答案。我想分享成功的结果,以防这与其他人相关。在分组后使用总结和应用 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))

我建议 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))