2

我希望创建 24 小时数据框,其中每个data.frame包含每小时对产品的需求为 1 列,接下来的 8 列包含每小时温度。例如,data.frame对于上午 8 点,data.frame将包含上午 8 点的需求列,然后包含从最近一小时到过去 7 小时的温度八列。额外的复杂情况是,在早上 8 点之前的几个小时,即“凌晨 4 点”,我必须得到昨天的温度。我正撞在墙上,试图弄清楚如何使用applyorplyr或矢量化函数来做到这一点。

demand8AM Temp8AM Temp7AM Temp6AM...Temp1AM

Demand4AM Temp4AM Temp3AM Temp2AM Temp1AM Temp12AM Temp11pm(Lag) Temp10pm(Lag) 

在我的代码中,小时是数字;1 是上午 12 点等。

这是我创建的一些简单代码,用于创建我正在处理的数据集。

#Creating some Fake Data
require(plyr)
# setting up some fake data
set.seed(31)
foo <- function(myHour, myDate){
rlnorm(1, meanlog=0,sdlog=1)*(myHour) + (150*myDate) 
}
Hour <- 1:24
 Day <-1:90
dates <-seq(as.Date("2012-01-01"), as.Date("2012-3-30"), by = "day")
myData <- expand.grid( Day, Hour)
names(myData) <- c("Date","Hour")

myData$Temperature <- apply(myData, 1, function(x) foo(x[2], x[1]))
myData$Date <-dates

myData$Demand <-(rnorm(1,mean = 0, sd=1)+.75*myData$Temperature )
## ok, done with the fake data generation.
4

1 回答 1

0

看起来您可以从使用时间序列中受益。这是我对你想要什么的解释(我在 rollapply 中使用了“平均”函数),而不是你要求的。我建议你阅读xtszoo包。

#create dummy time vector
time_index <- seq(from = as.POSIXct("2012-05-15 07:00"), 
                  to = as.POSIXct("2012-05-17 18:00"), by = "hour")

#create dummy demand and temp.C
info <- data.frame(demand = sample(1:length(time_index), replace = T), 
                   temp.C = sample (1:10))  

#turn demand + temp.C into time series
eventdata <- xts(info, order.by = time_index)

x2 <- eventdata$temp.C
for (i in 1:8) {x2 <- cbind(x2, lag(eventdata$temp.C, i))}
于 2013-10-03T13:35:48.583 回答