R时间序列-三个月对三个月的百分比变化



我有一个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)

但这会返回一个错误-xnmust be a nonnegative integer scalar, not a double vector of length 1.

定义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)

这是通过移动3个月百分比变化计算分母中的lag函数来实现的:

mutate("3mo3m_pct" = (rollapplyr(x, 3, sum, fill = NA)/lag(rollapplyr(x, 3, sum, fill = NA),3)*100-100))

最新更新