r - 当数据集是每月时,如何计算 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 个月的总和相比。我尝试了一种循环方法,但它不起作用,应该有一种更有效的方法。
如果有人可以提供帮助,我将不胜感激。
解决方案
我们可以使用as.yearqtr
fromzoo
将“日期”列转换为季度,进行分组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
推荐阅读
- java - 在多个 Pdf 文件中导出最后三页
- c# - 如何使用 Blazor 创建独立的 Web 应用程序?
- powershell - PowerShell - 发送电子邮件功能
- android - 当广告(Admob)进入应用程序时,有什么方法可以在 Android 或 iOS 上调用原生事件?
- azure - 是否可以在 Elastic Jobs 中运行命令以从 Azure SQL 处理 Azure SSAS 多维数据集?
- amazon-web-services - AWS Glue 连接到 RDS
- javascript - 如何协调响应与 Beaglebone black 上 RS485 通信的请求?
- python - 如何在 pyqt 图表中添加零值轴?
- coldfusion - cfschedule:如果找不到 url,则触发 onError 函数
- node.js - 如何使用@mui/x-data-grid 中的 API 调用填充 DataGrid 的行?