如何创建每小时数据的时间序列?

时间:2015-11-18 14:08:26

标签: r time-series

我有每小时数据。

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

5 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:0)

这个怎么样:

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

答案 2 :(得分:0)

我会使用zoo包和specialy handy function 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 

答案 3 :(得分:0)

以下是基础ts()R函数的使用方法(假设您的数据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)

答案 4 :(得分:0)

步骤1:您需要以POSIXct格式连接日期和小时列:

df$Date <- as.POSIXct(paste(df$Date, df$Time))

第2步:由于此数据是每小时的时间序列,因此应将其转换为xts对象,因为xts比ts更好地处理每小时数据。 order.by是具有时间观测值的列的值。

df <- as.xts(df, order.by = df$Date)

您的每小时时间序列数据df现在已经准备好