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)

只要它以看起来像我描述的那样的数据框开始,并输出像我描述的输出那样的数据框,我就不会附在操作方法上。

4

1 回答 1

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,因为不清楚您想要的变量。

于 2013-06-03T21:12:11.607 回答