2013-06-03 25 views
0

讓我們從頭開始:將在Tableau中讀取R輸出以創建儀表板,因此我需要R輸出看起來像某種方式。考慮到這一點,我將以R組中的數據幀開始,並帶有n組時間序列。我想每個組都運行auto.arima(或來自軟件包預測的其他預測方法)。我正在使用by函數來做到這一點,但我並沒有重視那種方法,這似乎是像我這樣的R初學者所做的工作。 我需要的輸出會在原始數據框中添加(比如說)1週期預測,填入日期(變量t)和變量(變量分類)。 如果可能的話,我想這種方法通過變量來推廣到多個變量(即class_1,... class_n)。從按時間序列對象提取數據

#generate fake data 
t<-seq(as.Date("2012/1/1"), by = "month", length.out = 36) 
class<-rep(c("A","B"),each=18) 
set.seed(1234) 
metric<-as.numeric(arima.sim(model=list(order=c(2,1,1),ar=c(0.5,.3),ma=0.3),n=35)) 
df <- data.frame(t,class,metric) 
df$type<-"ORIGINAL" 

#sort of what I'd like to do 
library(forecast) 
ts<-ts(df$metric) 
ts<-by(df$metric,df$class,auto.arima) 

#extract forecast and relevant other pieces of data 
#??? 

#what I'd like to look like 
t<-as.Date(c("2013/7/1","2015/1/1")) 
class<-rep(c("A","B"),each=1) 
metric<-c(1.111,2.222) 
dfn <- data.frame(t,class,metric) 
dfn$type<-"FORECAST" 

dfinal<-rbind(df,dfn) 

我沒有連接到如何做,只要它有一個數據幀,看起來像我的描述,並輸出像我描述的輸出數據幀開始。

回答

0

你的描述有點模糊,但這些方針的東西應該工作:

library(data.table) 
dt = data.table(df) 

dt[, {result = auto.arima(metric); 
     rbind(.SD, 
      list(seq(t[.N], length.out = 2, by = '1 month')[2], result$sigma2, "FORECAST"))}, 
    by = class] 

我任意選擇填寫sigma^2,因爲它並不清楚哪些變量(S)你想在那裏。