从by-timeseries对象中提取数据

时间:2013-06-03 18:22:21

标签: r time-series

让我们从最后开始:在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)

我没有依附于操作方法,只要它从一个看起来像我所描述的数据框开始,并输出一个像我描述的输出一样的数据框。

1 个答案:

答案 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,因为不清楚你想要哪个变量。