【发布时间】:2013-10-02 15:41:57
【问题描述】:
我希望创建 24 小时数据框,其中每个 data.frame 包含每小时对产品的需求,作为 1 列,接下来的 8 列包含每小时温度。例如,对于上午 8 点的 data.frame,data.frame 将包含上午 8 点的需求列,然后包含从最近一小时到过去 7 小时的温度八列。额外的复杂情况是,在早上 8 点之前的几个小时,即“凌晨 4 点”,我必须得到昨天的温度。我正在想办法弄清楚如何使用 apply 或 plyr 或矢量化函数来做到这一点。
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.
【问题讨论】:
-
这里有很多挑战。最重要的是,您将日期和时间放在两个单独的列中,而在这种情况下,它们可能应该放在一个列中。
-
你的真实数据有多大?
-
24 小时乘以 565 天约 13,000 条记录
-
请记住,您最终会将数据复制 24 倍。目前尚不清楚您打算如何使用此输出,并且您可能无需复制数据即可完成相同的操作。
-
里卡多:时间是每小时,但它被用作一个因素。我按小时切割数据,这样我就有了 24 个天数相同的数据集。我知道这部分可以用 plyr 完成并应用函数或拆分