R时间序列-三个月三个月的百分比变化
R Time series - three month on three month percentage change
我在 R 中有一个时间序列 (df
),我想为其计算不同时期的百分比变化:
month x
Jan 1
Feb 4
Mar 5
Apr 3
May 1
Jun 2
我可以使用以下方法计算系列的逐月百分比变化:
df <- df %>%
mutate(mom_pct = (count/lag(count)*100-100))
这导致
month x mom_pct
Jan 1 NA
Feb 4 300
Mar 5 25
Apr 3 -40
May 1 -66.67
Jun 2 100
但是,我不知道如何计算三个月的百分比变化(即最后三个月的总和除以前三个月)。
我尝试了以下方法:
df <- df %>%
mutate("3mo3m_pct" = (rollapplyr(count, 3, sum, fill = NA)/rollapplyr(lag(count, -3), 3, mean, fill = NA))*100-100)
但是这个 returns 一个错误 - x
n must be a nonnegative integer scalar, not a double vector of length 1.
这是通过在 3 个月百分比变化计算的分母中移动 lag
函数实现的:
mutate("3mo3m_pct" = (rollapplyr(x, 3, sum, fill = NA)/lag(rollapplyr(x, 3, sum, fill = NA),3)*100-100))
定义一个pct函数并在rollapplyr
中使用它:
library(dplyr)
library(zoo)
pct <- function(x) 100 * (sum(tail(x, 3)) / sum(head(x, 3)) - 1)
df %>% mutate(pct = rollapplyr(x, 6, pct, fill = NA))
备注
可重现形式的输入
Lines <- "month x
Jan 1
Feb 4
Mar 5
Apr 3
May 1
Jun 2"
df <- read.table(text = Lines, header = TRUE, strip.white = TRUE)
我在 R 中有一个时间序列 (df
),我想为其计算不同时期的百分比变化:
month x
Jan 1
Feb 4
Mar 5
Apr 3
May 1
Jun 2
我可以使用以下方法计算系列的逐月百分比变化:
df <- df %>%
mutate(mom_pct = (count/lag(count)*100-100))
这导致
month x mom_pct
Jan 1 NA
Feb 4 300
Mar 5 25
Apr 3 -40
May 1 -66.67
Jun 2 100
但是,我不知道如何计算三个月的百分比变化(即最后三个月的总和除以前三个月)。 我尝试了以下方法:
df <- df %>%
mutate("3mo3m_pct" = (rollapplyr(count, 3, sum, fill = NA)/rollapplyr(lag(count, -3), 3, mean, fill = NA))*100-100)
但是这个 returns 一个错误 - x
n must be a nonnegative integer scalar, not a double vector of length 1.
这是通过在 3 个月百分比变化计算的分母中移动 lag
函数实现的:
mutate("3mo3m_pct" = (rollapplyr(x, 3, sum, fill = NA)/lag(rollapplyr(x, 3, sum, fill = NA),3)*100-100))
定义一个pct函数并在rollapplyr
中使用它:
library(dplyr)
library(zoo)
pct <- function(x) 100 * (sum(tail(x, 3)) / sum(head(x, 3)) - 1)
df %>% mutate(pct = rollapplyr(x, 6, pct, fill = NA))
备注
可重现形式的输入
Lines <- "month x
Jan 1
Feb 4
Mar 5
Apr 3
May 1
Jun 2"
df <- read.table(text = Lines, header = TRUE, strip.white = TRUE)