繁体   English   中英

R - 每小时的时间序列

[英]R - time series hourly

我在下午3点到晚上10点之间每天都有以下来电数据集,如下所示:

Date        hour  Count  Year  Month  Day
01.01.2001  15    69     2001  1      1
01.01.2001  16    12     2001  1      1
01.01.2001  17    56     2001  1      1
01.01.2001  18    34     2001  1      1
01.01.2001  19    44     2001  1      1
01.01.2001  20    91     2001  1      1
01.01.2001  21    82     2001  1      1
01.01.2001  22    49     2001  1      1
...
17.08.2003  22    103    2003  8      17

需要做的是时间序列分析,包括预测,指数平滑,移动平均等。

我现在面临的问题是如何声明ts函数? 我只有从下午3点到晚上10点的高峰时段可用,所以我不能将频率声明为24。

有人可以帮帮我吗?

非常感谢欢呼,

1)假设系列在下午3点开始,那天是连续的,并且从下午3点到晚上10点的所有时间都存在:

tser <- ts(DF[-1], freq = 8)

赠送:

> tser
Time Series:
Start = c(1, 1) 
End = c(1, 8) 
Frequency = 8 
      hour Count Year Month Day
1.000   15    69 2001     1   1
1.125   16    12 2001     1   1
1.250   17    56 2001     1   1
1.375   18    34 2001     1   1
1.500   19    44 2001     1   1
1.625   20    91 2001     1   1
1.750   21    82 2001     1   1
1.875   22    49 2001     1   1

这将代表第1天下午3点的指数为1.0,第1天下午4点为1 + 1/8,第1天下午5点为1 + 2/8,...,第1天晚上10点为1 + 7/8,第2天下午3点为2 ,第2天下午4点为2 + 1/8等

2)这是相同的但是天数从1970-01-01以来的天数开始,而不是从1开始:

tser <- ts(DF[-1], start = as.Date("2001-01-01"), freq = 8)

赠送:

> tser
Time Series:
Start = c(11323, 1) 
End = c(11323, 8) 
Frequency = 8 
         hour Count Year Month Day
11323.00   15    69 2001     1   1
11323.12   16    12 2001     1   1
11323.25   17    56 2001     1   1
11323.38   18    34 2001     1   1
11323.50   19    44 2001     1   1
11323.62   20    91 2001     1   1
11323.75   21    82 2001     1   1
11323.88   22    49 2001     1   1

也就是说,这将表示每天作为1970-01-01以来的天数加上,如前所述,小时为0,1 / 8,...,7/8。

如果您以后需要重新生成日期/时间,那么:

library(chron)
tt <- as.numeric(time(tser))
as.chron(tt %/% 1) + (8 * tt%%1 + 15)/24

赠送:

[1] (01/01/01 15:00:00) (01/01/01 16:00:00) (01/01/01 17:00:00)
[4] (01/01/01 18:00:00) (01/01/01 19:00:00) (01/01/01 20:00:00)
[7] (01/01/01 21:00:00) (01/01/01 22:00:00)

3)动物园如果保持它们的间距不重要那么你可以试试这个:

library(zoo)
library(chron)
z <- zoo(DF[-1], as.chron(format(DF$Date), "%d.%m.%Y") + DF$hour/24)

赠送:

> z
                    hour Count Year Month Day
(01/01/01 15:00:00)   15    69 2001     1   1
(01/01/01 16:00:00)   16    12 2001     1   1
(01/01/01 17:00:00)   17    56 2001     1   1
(01/01/01 18:00:00)   18    34 2001     1   1
(01/01/01 19:00:00)   19    44 2001     1   1
(01/01/01 20:00:00)   20    91 2001     1   1
(01/01/01 21:00:00)   21    82 2001     1   1
(01/01/01 22:00:00)   22    49 2001     1   1

动物园方法不要求所有时间都存在,也不要求连续几天。

注意:我不确定您是否确实需要单独分配所有日期和小时字段,因为它们可以在运行中轻松生成,因此这可能就足够了。

Count <- z$Count

年份可以通过as.numeric(format(time(Count), "%Y"))恢复,月,日和小时可以通过使用%m%d%H代替%Y来恢复。

还可以使用month.day.year(time(Count))生成月,日和年列的列表。

years(time(Count))months(time(Count))days(time(Count))hours(time(Count))将产生指示数量的因子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM