R每周时间序列对象

时间:2018-08-30 11:55:50

标签: r time-series

我有以下向量,其中包含12月每天的数据。

vector1 <- c(1056772, 674172, 695744, 775040, 832036,735124,820668,1790756,1329648,1195276,1267644,986716,926468,828892,826284,749504,650924,822256,3434204,2502916,1262928,1025980,1828580,923372,658824,956916,915776,1081736,869836,898736,829368)

现在,我想每周创建一个时间序列对象,并使用以下代码片段:

weeklyts = ts(vector1,start=c(2016,12,01), frequency=7)

但是,起点和终点不正确。我总是得到以下时间序列:

> weeklyts
Time Series:
Start = c(2017, 5) 
End = c(2021, 7) 
Frequency = 7 
 [1] 1056772  674172  695744  775040  832036  735124  820668 1790756 1329648 1195276 1267644  986716  926468  828892  826284  749504
[17]  650924  822256 3434204 2502916 1262928 1025980 1828580  923372  658824  956916  915776 1081736  869836  898736  829368

有人现在犯了我的错吗?

1 个答案:

答案 0 :(得分:2)

要获得一个按您期望的开始和结束的时间序列,您需要考虑时间序列。从2016年12月起您有31天的时间。

“时间开始”选项处理的是2个数字,而不是3个。因此,如果您从2016年的第1个月开始,则类似于c(2016,1)。

ts(1:12, start = c(2016, 1), frequency = 12) 
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2016   1   2   3   4   5   6   7   8   9  10  11  12

现在,每天的数据很烦人。 ts无法处理leap年。这就是为什么您看到人们使用365.25的频率获取年度时间序列的原因。为了获得良好的2016年12月系列,我们可以执行以下操作:

ts(vector1, start = c(2016, 336), frequency = 366)
Time Series:
Start = c(2016, 336) 
End = c(2016, 366) 
Frequency = 366 
 [1] 1056772  674172  695744  775040  832036  735124  820668 1790756 1329648 1195276 1267644  986716  926468  828892  826284  749504
[17]  650924  822256 3434204 2502916 1262928 1025980 1828580  923372  658824  956916  915776 1081736  869836  898736  829368

请注意以下情况:

  1. 频率为366,因为2016年是a年
  2. 开始是c(2016,336),因为336是一年中的“ 2016-12-01”日期

我个人使用xts包(和Zoo)来处理每日数据,并使用xts中的函数汇总到每周时间序列。然后,可以将它们与类似ts时间序列之类的软件包一起使用。

编辑: 添加了小的xts示例

my_df <- data.frame(dates = seq.Date(as.Date("2016-12-01"), as.Date("2017-01-31"), by = "day"),
                    var1 = rep(1:31, 2))

library(xts)
my_xts <- xts(my_df[, -1], order.by = my_df$dates)

# rollup to weekly. Dates shown are the last day in the weekperiod.
my_xts_weekly <- period.apply(my_xts, endpoints(my_xts, on = "weeks"), colSums)
head(my_xts_weekly)
           [,1]
2016-12-04   10
2016-12-11   56
2016-12-18  105
2016-12-25  154
2017-01-01  172
2017-01-08   35

根据您的需要,可以将其转换回data.frames等。阅读period.apply的帮助,因为您可以在滚动机制中指定自己的功能。并阅读xts(和动物园)小插曲。