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

405 阅读1分钟

你可以在R的基础上使用strftime()函数,加上"%V"参数,在R中按周分组数据。

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

df$week_num <- strftime(df$date, format = "%V")

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

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

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

#create data frame 
df <- data.frame(date=as.Date(c('1/8/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-08     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

我们可以使用下面的代码来添加一列,显示每个日期的周数。

#add column to show week number
df$week_num <- strftime(df$date, format = "%V")

#view updated data frame
df

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

注意:从文档中可以看出,**%V%**是如何计算日期数字的:"一年中的周数(周一为一周的第一天)为小数[01,53]。如果包含1月1日的一周在新的一年里有4天或更多,那么它被认为是第1周。否则,就是上一年的最后一周,而下一周就是第1周"。

一旦我们创建了这个新列,我们就可以根据周数来汇总数值。

例如,我们可以使用下面的代码来计算按周分组的销售总和。

library(dplyr)

#calculate sum of sales, grouped by week
df %>%
  group_by(week_num) %>%
  summarize(total_sales = sum(sales))

# A tibble: 6 x 2
  week_num total_sales
            
1 01                22
2 06                22
3 07                23
4 09                16
5 12                40

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

  • 第1周的销售额之和为22
  • 第6周的销售量之和为22
  • 第七周的销售额之和为23

以此类推。

我们还可以使用另一个指标来汇总数据。

例如,我们可以使用下面的代码来计算按周分组的销售额的平均值。

library(dplyr)

#calculate mean of sales, grouped by week
df %>%
  group_by(week_num) %>%
  summarize(mean_sales = mean(sales))

# A tibble: 5 x 2
  week_num mean_sales
           
1 01               11
2 06               22
3 07               23
4 09               16
5 12               20

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

  • 第1周的销售额的平均值是11
  • 第6周销售额的平均值为22
  • 第7周的销售额平均数是23

以此类推。