首页 > 解决方案 > 当数据集是每月时,如何计算 Quarter Over Quarter %change

问题描述

我有这个 df ,其中观察是每月表示的:

library(dplyr)
library(lubridate)

Date <- seq(from = as_date("2019-11-01"), to = as_date("2020-10-01"), by = "month")

A <- (10:21)

df <- data.frame(Date, A)
view(df)

    Date         A
   <date>     <int>
 1 2019-11-01    10
 2 2019-12-01    11
 3 2020-01-01    12
 4 2020-02-01    13
 5 2020-03-01    14
 6 2020-04-01    15
 7 2020-05-01    16
 8 2020-06-01    17
 9 2020-07-01    18
10 2020-08-01    19
11 2020-09-01    20
12 2020-10-01    21

使用lag()我知道如何计算月比 (MoM) 的百分比变化,但无法将一个季度与上一季度进行比较:即 3 个月的总和与前 3 个月的总和相比。我尝试了一种循环方法,但它不起作用,应该有一种更有效的方法。

如果有人可以提供帮助,我将不胜感激。

标签: rdplyrzoo

解决方案


我们可以使用as.yearqtrfromzoo将“日期”列转换为季度,进行分组sum,然后获取Diff当前和下一个 ( lead) 或当前和上一个 ( lag)之间的 erence

library(dplyr)
library(zoo)
df %>%
      group_by(Quarter = as.yearqtr(Date)) %>%
      summarise(A = sum(A), .groups = 'drop') %>%
      mutate(Diff = lead(A) - A)

-输出

# A tibble: 5 x 3
#  Quarter       A  Diff
#  <yearqtr> <int> <int>
#1 2019 Q4      21    18
#2 2020 Q1      39     9
#3 2020 Q2      48     9
#4 2020 Q3      57   -36
#5 2020 Q4      21    NA

推荐阅读