如何在R中按月对数据进行分组(附实例)

1,605 阅读2分钟

你可以使用R语言中lubridate包中的floor_date()函数来快速按月分组数据。

这个函数使用以下基本语法:

library(tidyverse)

df %>% 
    group_by(month = lubridate::floor_date(date_column, 'month')) %>%
    summarize(sum = sum(value_column))

下面的例子展示了如何在实践中使用这个函数。

例子:在R中按月分组数据

假设我们在R语言中拥有以下数据框,它显示了某些商品在不同日期的总销售额:

#create data frame 
df <- data.frame(date=as.Date(c('1/4/2022', '1/9/2022', '2/10/2022', '2/15/2022',
                                '3/5/2022', '3/22/2022', '3/27/2022'), '%m/%d/%Y'),
                 sales=c(8, 14, 22, 23, 16, 17, 23))

#view data frame
df

        date sales
1 2022-01-04     8
2 2022-01-09    14
3 2022-02-10    22
4 2022-02-15    23
5 2022-03-05    16
6 2022-03-22    17
7 2022-03-27    23

我们可以使用下面的代码来计算按月分组的销售额之和:

library(tidyverse)

#group data by month and sum sales
df %>% 
    group_by(month = lubridate::floor_date(date, 'month')) %>%
    summarize(sum_of_sales = sum(sales))

# A tibble: 3 x 2
  month      sum_of_sales
              
1 2022-01-01           22
2 2022-02-01           45
3 2022-03-01           56

从输出结果中我们可以看到:

  • 一月份总共有22笔销售
  • 二月份总共有45笔销售
  • 3月共有56笔销售

我们还可以用其他的指标来汇总数据。

例如,我们可以计算一天内的最大销售额,按月分组:

library(tidyverse)

#group data by month and find max sales
df %>% 
    group_by(month = lubridate::floor_date(date, 'month')) %>%
    summarize(max_of_sales = max(sales))

# A tibble: 3 x 2
  month      max_of_sales
              
1 2022-01-01           14
2 2022-02-01           23
3 2022-03-01           23

从输出结果中我们可以看到:

  • 1月份一天内的最大销售额是14
  • 二月份一天的最大销售量是23
  • 三月份一天的最大销售量是23

在summaryize()函数中,你可以随意使用任何你想要的指标。

其他资源

下面的教程解释了如何在R中执行其他常见任务:

如何在R中从日期中提取年份
如何在R中从日期中提取月份
如何在R中按日期对数据框进行排序
如何在R中将因子转换成日期