2

24 時間ごとのデータ フレームを作成したいと考えています。各データ フレームにはdata.frame、1 列として製品の 1 時間ごとの需要が含まれ、次の 8 列には 1 時間ごとの気温が含まれています。たとえば、data.frame午前 8 時のの場合、 には午前data.frame8 時の需要の列が含まれ、最新の時間から過去 7 時間までの範囲の温度の列が 8 つ含まれます。さらに複雑なのは、午前 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.
4

1 に答える 1

0

時系列を利用することでメリットが得られるようです。これは、あなたが求めたものではなく、あなたが望むものの私の解釈です(私はrollapplyで「平均」関数を使用しました)。xtsとパッケージを読むことをお勧めしzooます。

#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 に答える