簡體   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