我有以下向量,其中包含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
有人现在犯了我的错吗?
答案 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
请注意以下情况:
我个人使用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(和动物园)小插曲。