平均R中的时间序列子集

时间:2018-04-05 23:50:42

标签: r mean

没关系,我正在试图找出一种不同的方法。非常感谢您的回复。如何关闭此问题或标记为已解决?

1 个答案:

答案 0 :(得分:1)

您可以使用purrr::map计算不同(滚动)窗口的平均值。这将允许灵活地指定任意数量的(滚动)窗口。

例如:

  1. 让我们生成5年的月度数据。

    # Sample data
    set.seed(2018);
    nObs <- 5 * 12;
    dates <- seq(as.Date("2018/01/01"), by = "month", length.out = nObs);
    sample.xts <- xts(x = runif(nObs), order.by = dates);
    
  2. 使用purrr::map使用zoo::rollapplyr计算不同窗口的滚​​动平均值。在这里,我们计算窗口c(length(sample.xts), 12, 6)中的滚动平均值,这对应于所有观测值(5年),1年窗口和6个月窗口的平均值。

    # Calculate mean in three rolling windows: 60 months (all), 12 months, 6 months
    library(tidyverse);
    library(zoo);
    df <- purrr::map(
        c(length(sample.xts), 12, 6),
        ~ data.frame(val = sample.xts) %>%
            rownames_to_column("date") %>%
            mutate(!!paste0("mean_", .x) := rollapplyr(val, .x, mean, by.column = F, fill = NA))) %>%
        reduce(left_join, by = c("date", "val"))
    head(df, n = 13);
    #    date        val mean_60   mean_12    mean_6
    #1  2018-01-01 0.33615347      NA        NA        NA
    #2  2018-02-01 0.46372327      NA        NA        NA
    #3  2018-03-01 0.06058539      NA        NA        NA
    #4  2018-04-01 0.19743361      NA        NA        NA
    #5  2018-05-01 0.47431419      NA        NA        NA
    #6  2018-06-01 0.30104860      NA        NA 0.3055431
    #7  2018-07-01 0.60675886      NA        NA 0.3506440
    #8  2018-08-01 0.13001210      NA        NA 0.2950255
    #9  2018-09-01 0.95865471      NA        NA 0.4447037
    #10 2018-10-01 0.54684949      NA        NA 0.5029397
    #11 2018-11-01 0.39561597      NA        NA 0.4898233
    #12 2018-12-01 0.66453861      NA 0.4279740 0.5504050
    #13 2019-01-01 0.98211229      NA 0.4818039 0.6129639
    
  3. 请注意,基于所有观察结果的平均值是data.frame中的最后一个条目:

    tail(df);
    #         date       val   mean_60   mean_12    mean_6
    #55 2022-07-01 0.6625414        NA 0.4422977 0.4933802
    #56 2022-08-01 0.9665480        NA 0.4729062 0.5254261
    #57 2022-09-01 0.3932122        NA 0.4555178 0.5234418
    #58 2022-10-01 0.6043476        NA 0.5056410 0.5891695
    #59 2022-11-01 0.2637507        NA 0.4473775 0.6089818
    #60 2022-12-01 0.4894682 0.4809708 0.4824080 0.5633114