2013-06-03 3 views
0

Давайте начнем с конца: вывод R будет прочитан в Tableau для создания панели управления, и поэтому мне нужно, чтобы вывод R выглядел определенным образом. Имея это в виду, я начинаю с кадра данных в R с n группами временных рядов. Я хочу запускать auto.arima (или другой метод прогнозирования из прогноза пакета) по каждой группе. Я использую функцию by this для этого, но я не привязан к этому подходу, это просто то, что, похоже, делает работу для R-новичка, подобного мне. Результат, который мне нужен, добавит (скажем) 1 период к исходному фрейму данных, заполняя дату (переменную t) и переменную (переменный класс). Если возможно, мне хотелось бы, чтобы подход обобщал на несколько по переменным (например, class_1, ... class_n,).Извлечь данные из объекта by-timeseries

#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, так как это было не ясно, какая переменная (ы) вы хотите там.

Смежные вопросы