窗口功能未按预期工作

时间:2017-01-27 09:59:52

标签: r time-series

我有一个月度时间序列 - monthlyTs:

monthlyTs <- ts(all.xts , frequency = 12, start=decimal_date(ymd("2012-01-29")))
head(index(monthlyTs))
  

1“2012-01-29 00:00:00 UTC”“2012-02-26 01:22:47 UTC”“2012-03-25   02:45:35 UTC“”2012-04-29 04:29:04 UTC“       [5]“2012-05-27 05:51:52 UTC”“2012-06-24 07:14:39 UTC”

我想应用从2013年开始的时间窗口:

head(window(monthly, start = 2013))
  

2012-01-29 00:00:00 2

     

2012-02-26 01:22:47 8 2012-03-25 02:45:35 6 2012-04-29 04:29:04   5 2012-05-27 05:51:52 4 2012-06-24 07:14:39 4

所以看起来像窗口函数没有按预期过滤。有什么问题?

根据要求提供完全可重复的示例:

christmas.csv - tiny CSV file (google trends for 'Christmas' request)

#Reading data from the csv. Format - [week start date], [views per week]
data = read.csv('christmas.csv',  sep=",", header = FALSE, skip = 3,col.names = c("Week","Views"))[[2]]

# creating time series
myTs <- ts(data[[2]], freq=365.25/7, start=decimal_date(ymd("2012-01-29")))

#converting from weekly to month time series
all.xts <- xts(myTs, date_decimal(index(myTs)))
monthlyTs <- ts(all.xts , frequency = 12, start=decimal_date(ymd("2012-01-29")))

head(window(monthlyTs, start = 2013))
  

2012-01-29 00:00:00 2

     

2012-02-26 01:22:47 8 2012-03-25 02:45:35 6 2012-04-29 04:29:04 5   2012-05-27 05:51:52 4 2012-06-24 07:14:39 4

1 个答案:

答案 0 :(得分:1)

有两个问题:

  1. 对象all.xts是每周而非每月时间
  2. 参数频率的传递值不正确
  3. 对于第二点,尝试使用

    更改函数start调用中为参数ts传递的值
    c(lubridate::year("2012-01-29"), lubridate::month("2012-01-29"))
    

    并将频率更改为值12.即使用以下行:

    ts(all.xts , frequency = 12, start = c(lubridate::year("2012-01-29"), lubridate::month("2012-01-29")) )
    

    使用dput的输出,您的代码重写如下:

    data <- c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
              2L, 3L, 3L, 3L, 4L, 5L, 5L, 6L, 8L, 11L, 16L, 22L, 33L, 42L, 
              45L, 55L, 64L, 8L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
              1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 5L, 6L, 8L, 
              12L, 16L, 21L, 27L, 43L, 47L, 56L, 79L, 10L, 5L, 2L, 2L, 2L, 
              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
              3L, 3L, 4L, 5L, 5L, 6L, 8L, 12L, 17L, 21L, 27L, 43L, 47L, 53L, 
              87L, 12L, 5L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
              2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 5L, 6L, 6L, 8L, 13L, 
              17L, 20L, 27L, 44L, 50L, 54L, 100L, 15L, 6L, 3L, 2L, 2L, 1L, 
              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
              3L, 4L, 5L, 5L, 6L, 8L, 11L, 16L, 21L, 29L, 43L, 48L, 53L, 80L, 
              46L, 8L, 3L, 2L)
    
    myTs <- ts(data, freq=365.25/7, start=decimal_date(ymd("2012-01-29")))
    all.xts <- xts::xts(myTs, date_decimal(index(myTs)))
    monthlyTs <- ts(all.xts , frequency = 12, start = c(lubridate::year("2012-01-29"), lubridate::month("2012-01-29")) )
    window(monthlyTs, start= c(2013))
    

    最后一行将打印出来:

    > window(monthlyTs, start= c(2013))
         Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
    2013   1   1   1   1   1   1   1   1   1   1   1   1
    2014   1   1   1   1   2   2   2   2   3   3   3   4
    2015   5   5   6   8  11  16  22  33  42  45  55  64
    2016   8   4   2   2   2   2   2   2   1   1   1   1
    2017   1   1   1   1   1   1   1   1   1   1   1   1
    2018   1   1   1   1   1   1   1   2   2   2   2   2
    2019   3   3   3   4   4   5   6   8  12  16  21  27
    2020  43  47  56  79  10   5   2   2   2   1   1   1
    2021   1   1   1   1   1   1   1   1   1   1   1   1
    2022   1   1   1   1   1   1   1   1   1   1   2   2
    2023   2   2   2   2   3   3   3   4   5   5   6   8
    2024  12  17  21  27  43  47  53  87  12   5   2   2
    2025   2   1   1   1   1   1   1   1   1   1   1   1
    2026   1   1   1   1   1   1   1   1   1   1   1   1
    2027   1   2   2   2   2   2   2   2   3   3   3   4
    2028   5   6   6   8  13  17  20  27  44  50  54 100
    2029  15   6   3   2   2   1   1   1   1   1   1   1
    2030   1   1   1   1   1   1   1   1   1   1   1   1
    2031   1   1   1   1   1   1   2   2   2   2   2   2
    2032   3   3   3   4   5   5   6   8  11  16  21  29
    2033  43  48  53  80  46   8   3   2