0

私の目標: 時間と呼ばれる係数で分割された多変量時系列の一意の data.frame を作成するループを作成することです。データは毎日のもので、1 日の各時間の需要と広告費の値があります。各 data.frame には、1 つの日付列、1 つの需要列、および現在の時間と過去 7 時間の広告費を表す 8 つの広告費列があります。たとえば、I=3 と I=9 の 2 つのループ サイクルは次のようになります。 ...AdSpend9PM (昨日) 秘訣は、早い時間帯に前日の時間帯からいくらかの広告費を引き出さなければならないということです。このサイトの何人かの堅実なコーダーは、「zoo」パッケージについて読むことを勧めてくれました。やった!そのため、この問題をしっかりと解決することができました。これは、必要なものと同様の一連の data.frames を出力する疑似データのコードです。私は初心者なので、これがこのループを作成する最も効率的な方法かどうかはわかりません。だから私の質問は:

  1. このループを作成する簡単な方法はありますか?

  2. ループ内の変数に名前を割り当てる方法はありますか?

  3. ベクトル化された方法でデータフレームを作成することは可能ですか?

最初の質問ははるかに重要です。ありがとうございました

set.seed(1)
library(forecast)
library(lubridate)
library(zoo)
library(reshape)

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$Adspend <- apply(myData, 1, function(x) foo(x[2], x[1]))
myData$Date <-dates

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

myData


ADDate<-myData[,-4]
DemDate<-myData[,-3]
HourAD<-melt(ADDate, id=c("Date","Hour"), measured=c("Adspend"))
HourAD<-cast(HourAD,...~Hour)
ADHR<-zoo(HourAD,HourAD$Date)
HourDemand<-melt(DemDate, id=c("Date","Hour"), measured=c("Demand"))
HourDemand<-cast(HourDemand,...~Hour)
DEMHR<-zoo(HourDemand,HourDemand$Date)

DATASET <-vector("list",length(Hour))
for(i in seq_along(Hour)) { ifelse(i==1, DATASET[[i]]<-merge(DEMHR[,1],ADHR[,1],lag(ADHR[,18:24],-1),DATASET[[i]]<-merge(DEMHR[,i],ADHR[,i],DATASET[[i-1]]))}


DATASET <-vector("list",length(Hour))
for(i in seq_along(Hour)) { ifelse(i==1, DATASET[[i]]<-merge(DEMHR[,1],ADHR[,1],lag(ADHR[,18:24],-1)),DATASET[[i]]<-merge(DEMHR[,i],ADHR[,i],DATASET[[i-1]][,2:7]))}
4

0 に答える 0