[英]How to create a time series of hourly data?
我有每小時值的數據。
SNo Date Hour X
1 2006-12-17 00:00:00 1.8824667
2 2006-12-17 01:00:00 3.3494000
3 2006-12-17 02:00:00 1.5872667
4 2006-12-17 03:00:00 1.6622000
5 2006-12-17 04:00:00 2.2157667
6 2006-12-17 05:00:00 1.9967333
7 2006-12-17 06:00:00 1.3033000
8 2006-12-17 07:00:00 1.6200333
9 2006-12-17 08:00:00 1.8905667
10 2006-12-17 09:00:00 2.5490667
11 2006-12-17 10:00:00 3.6289000
我將如何創建一個時間序列? 頻率和開始/結束參數是什么?
最后的日期和時間是
2010-11-26 21:00:00
library(lubridate)
NoOfHours <- as.numeric(ymd_hms("2010-11-26 21:00:00") - ymd_hms("2006-12-01 00:00:00"))*24
ymd_hms("2006-12-01 00:00:00") + hours(0:NoOfHours)
這是在基數R
使用ts()
函數的方法(假設數據X
包含在數據框dat
)。 你需要指定的第一年,小時start
(你不需要end
),並且frequency
將在一年內的小時數。
firstHour <- 24*(as.Date("2006-12-17 00:00:00")-as.Date("2006-1-1 00:00:00"))
tt <- ts(dat$X,start=c(2006,firstHour),frequency=24*365)
這個怎么樣:
df <- data.frame(Date = rep("2006-12-01", 10),
Time = paste0(1:10, ":00:00"),
x = rnorm(10))
library(zoo)
df$Date <- as.POSIXct(paste(df$Date, df$Time), "GMT")
as.zoo(df[, c("Date", "x")])
# Date x
# 1 2006-12-01 01:00:00 -0.1386150
# 2 2006-12-01 02:00:00 1.8828398
# 3 2006-12-01 03:00:00 0.8736687
# 4 2006-12-01 04:00:00 -0.9145971
# 5 2006-12-01 05:00:00 -1.2449176
# 6 2006-12-01 06:00:00 -0.3599822
# 7 2006-12-01 07:00:00 1.3287747
# 8 2006-12-01 08:00:00 0.2926791
# 9 2006-12-01 09:00:00 -0.7015052
# 10 2006-12-01 10:00:00 0.8822346
我將使用zoo
包和方便的read.zoo
函數read.zoo
來創建時間序列。
library(zoo)
## if you have a file input replace text= by filename
x.zoo <- read.zoo(text="SNo Date Hour X
1 2006-12-17 00:00:00 1.8824667
2 2006-12-17 01:00:00 3.3494000
3 2006-12-17 02:00:00 1.5872667
4 2006-12-17 03:00:00 1.6622000
5 2006-12-17 04:00:00 2.2157667
6 2006-12-17 05:00:00 1.9967333
7 2006-12-17 06:00:00 1.3033000
8 2006-12-17 07:00:00 1.6200333
9 2006-12-17 08:00:00 1.8905667
10 2006-12-17 09:00:00 2.5490667
11 2006-12-17 10:00:00 3.6289000",index=c(2,3),tz="",
header=TRUE)
然后很容易將其強制為ts
對象:
as.ts(x.zoo)
Time Series:
Start = 1166310000
End = 1166346000
Frequency = 0.000277777777777778
步驟1:您需要以POSIXct格式連接Date和Hour列:
df$Date <- as.POSIXct(paste(df$Date, df$Time))
第2步:由於此數據是每小時的時間序列,因此您應該將其轉換為xts對象,因為xts比ts更好地處理每小時數據。 order.by是具有時間觀測值的列的值。
df <- as.xts(df, order.by = df$Date)
您的每小時時間序列數據df現已准備就緒
一些答案沒有考慮閏年,包括投票最多的。 有關如何在 R 中定義每小時時間序列的信息,請參閱 Rob Hyndman(此處和此處):
firstHour <- 24*(as.Date("2006-12-17 00:00:00")-as.Date("2006-1-1 00:00:00")) # As suggested by Mark S
tt <- ts(dat$X,start=c(2006,firstHour),frequency=24*365.25)
所以頻率應該是365.25*24
而不是365*24
。 如果我們談論年度期間,情況確實如此。 我們也可以談論幾周內的每小時時間序列,這會將頻率更改為7*24
。 我們可以使用msts
處理多個季節性時期:
library(forecast)
msts(x, seasonal.periods= c(7*24, 365.25*24))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.