首页 > 解决方案 > 如何在R中选择包含最大小时值的日期?

问题描述

我有以下数据集

df <- data.frame(Date = c("12-01-2020", "12-01-2020", "12-01-2020", "12-02-2020", "12-02-2020", "12-02-2020", "12-03-2020", "12-03-2020", "12-03-2020"), hour = c(1, 2, 3, 1, 2, 3, 1, 2, 3), volume = c(28, 4, 12, 16, 33, 72, 55, 24, 65))

我正在使用以下技术来获取最大音量的日期

max_day <- df %>%
  group_by(Date) %>%
  summarise(total_volume = sum(volume)) %>%
  slice(which.max(total_volume)) %>%
  select(Date)

当我这样做时,我返回“12-03-2020”,因为加在一起的 3 天具有最高值。

我正在尝试做同样的事情,但略有不同。我想获得最大小时的日期。现在我正在尝试类似上面的东西,但它不起作用。

max_hour <- df %>%
  group_by(Date, hour) %>%
  summarise(total_volume = sum(volume)) %>%
  slice(which.max(total_volume)) %>%
  select(Date)

我想要这个返回“12-02-2020”,因为它包含最高小时 = 72。

标签: rdatetimedplyrgroup-by

解决方案


在您的代码中,您按日期和小时分组,然后汇总步骤删除最后一个分组级别(小时),同时保留之前的分组级别(日期)。因此,除非您ungroup() %>%或使用summarize(... , .groups = "drop") %>%,否则该阶段的数据仍按日期分组,您将获得每天而不是整体的最大音量小时。

max_hour <- df %>%
  group_by(Date, hour) %>%
  summarise(total_volume = sum(volume)) %>%  # either add `.groups = "drop")` here,
  ungroup() %>%                              # or use this line  
  slice_max(total_volume)


# A tibble: 1 x 3
  Date        hour total_volume
  <chr>      <dbl>        <dbl>
1 12-02-2020     3           72

推荐阅读