【发布时间】:2018-10-24 03:22:25
【问题描述】:
尝试在 R 中创建每小时的时间序列。
我有一个收集每小时车辆数量的数据框,它看起来像:
> head(df)
# A tibble: 6 x 8
interval cars vans trucks total `mean speed` `% occupation` hour
<dttm> <int> <int> <int> <int> <dbl> <dbl> <int>
1 2017-10-09 00:00:00 7 0 0 7 7.37 1. 0
2 2017-10-09 01:00:00 24 0 0 24 16.1 3. 1
3 2017-10-09 02:00:00 27 0 0 27 18.1 2. 2
4 2017-10-09 03:00:00 47 3 0 50 31.5 3. 3
5 2017-10-09 04:00:00 122 1 5 128 48.0 16. 4
6 2017-10-09 05:00:00 353 6 2 361 66.3 20. 5
> tail(df,1)
# A tibble: 1 x 8
interval cars vans trucks total `mean speed` `% occupation` hour
<dttm> <int> <int> <int> <int> <dbl> <dbl> <int>
1 2018-03-15 20:00:00 48 0 2 50 31.5 5. 20
查看starting a daily time series in R 的答案,清楚地解释了如何按天创建一个 ts 我已将此 df 转换为时间序列:
ts2Start <- df$interval[1]
ts2End <- df$interval[nrow(df)]
indexPerHour <- seq(ts2Start, ts2End, by = 'hour')
由于我们一年有 365 天,每天 24 小时,所以我将 ts 创建为:
> df.ts <- ts(df$total, start = c(2017, as.numeric(format(indexPerHour[1], '%j'))),
+ frequency=24*365)
在哪里
as.numeric(format(indexPerHour[1], '%j')))
返回 282
为了验证我在做什么,我检查了从索引中获得的日期是否与我的数据框中的第一行相同
head(date_decimal(index(df.ts)),1)
但我的第一个日期/时间应该是:“2017-10-09 00:00:00” 我得到:“2017-01-12 16:59:59 UTC”
看起来df.ts 系列中的第一个索引开始于 ~ 282/24
我不明白我做错了什么。 ts() 中的 start 参数如何工作?
我也查了帖子:How to Create a R TimeSeries for Hourly data
建议使用xts包的地方。
问题是我只是从一本使用tslm() 并且似乎不支持xts 对象的书中学习。
我可以使用ts() 创建每小时时间序列吗?
【问题讨论】:
-
我终于找到了问题所在:创建ts对象时我必须保持相同的单位:由于频率是24*365,所以开始参数应该是24*。有了这个日期/时间几乎相同(差异为 1 小时)
标签: r time-series