【问题标题】:R Time series - three month on three month percentage changeR时间序列 - 三个月的三个月百分比变化
【发布时间】:2022-01-07 04:34:15
【问题描述】:

我在 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)

但这会返回错误 - x n must be a nonnegative integer scalar, not a double vector of length 1.

【问题讨论】:

    标签: r time-series zoo


    【解决方案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)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-08-13
        • 2021-01-19
        • 1970-01-01
        • 2016-11-30
        • 2021-06-01
        • 2021-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多