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以下是如何使用baseR
中的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严格来说,你已经有了一个时间序列。您可以检查packagexts
@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)