让我们从最后开始:在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 :(得分: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
,因为不清楚你想要哪个变量。