【问题标题】:Extract data from a by-timeseries object从按时间序列对象中提取数据
【发布时间】:2013-06-04 05:12:11
【问题描述】:

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

我没有附加到操作方法,只要它以看起来像我描述的数据框开始,并输出像我描述的输出一样的数据框。

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    您的描述有点含糊,但这些内容应该可行:

    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,因为不清楚你想要在那里的哪些变量。

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 2016-07-04
      相关资源
      最近更新 更多