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

R 如何创建每小时数据的时间序列?,r,time-series,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-

我有一个小时值的数据

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

这个怎么样:

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

df我会使用
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)
库(lubridate)

NoOfHours以下是如何使用base
R
中的
ts()
函数(假设数据
X
包含在数据框
dat
中)。您需要为
开始
(不需要
结束
)指定第一年和第一小时,
频率
将是一年中的小时数

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)

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

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

df$Date严格来说,你已经有了一个时间序列。您可以检查package
xts
@Pascal:它们可能指的是一个
ts
对象,该对象的构造函数具有
start
end
frequency
参数。@JoshuaUlrich是的,当然可以。您可以将日期和时间列强制为POSIXct对象
data$dateTime=as.POSIXct(粘贴(data$Date,data$Hour),format=“%Y-%m-%d%H:%m:%S”)
然后您可以使用以下内容创建时间序列对象:
data$ts=ts(ts=data$dateTime,start=data$dateTime[1],end=data$dateTime[nrow(data)])
@ColinCharles您给出的ts函数中的频率参数是多少?这些是每小时的电功率值,分布在4年内。我想观察季节性、趋势等,以便在不使用频率参数的情况下分解工作?我在R
日期x
中得到了这一结果。4847575
3 11649420001.1840722
日期列中的那些值是什么?它们是自1970年以来的秒数(R中的默认日期或类似日期)?我编辑了答案,现在我使用
zoo
as.zoo
将data.frame转换为时间序列对象。显然,
ts
不喜欢
POSIXct
对象作为日期…奇怪。
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$Date <- as.POSIXct(paste(df$Date, df$Time))
df <- as.xts(df, order.by = df$Date)