2017-11-02 2 views
0
library(fpp) 
library(purrr) 
library(tidyr) 

data(austourists) 
tr <- window(austourists,end=c(2007,12)) 
te <- window(austourists, start=c(2008,1)) 

Ich habe die australischen Touristen Daten aus dem FPP-Paket. Ich möchte mehrere Zeitreihenobjekte erstellen, die basierend auf unterschiedlichen Anfangsjahren getrimmt werden.Nest Time-Series Objekt in einen Datenrahmen

df <- as.data.frame(1999:2005) 
colnames(df) <- "yr_start" 
df$yr_end <- 2008 

Ich mag die Fensterfunktion wiederholen, wie oben, aber mit den gegebenen Eingaben in df gesehen. Ich habe versucht, map und zu verwenden, um ein TimeSeries-Objekt zu erstellen und es an Ort und Stelle zu verschachteln.

Ich bin mit dem Ziel für einen Datenrahmen mit der Struktur von

head(df) 
yr_start yr_end ts.object 
<num> <num> <list> 
1992  2008  <S3 class: ts object> 
1993  2008  <S3 class: ts object> 
1994  2008 <S3 class: ts object> 
1995  2008 <S3 class: ts object> 
1996  2008 <S3 class: ts object> 
1997  2008 <S3 class: ts object> 

Das Ziel ist es, diese ts Objekte zu verwenden später exponentielle Glättung Modelle mit Hilfe der Kartenfunktion auf diesen ts Objekte zu laufen.

Antwort

2

Sie können map2 über yr_start und yr_end Spalten verwenden und ein ts Objekt für jedes Paar von start-end Jahre konstruieren:

df %>% 
    mutate(ts.object = map2(yr_start, yr_end, ~ window(austourists, start=c(.x, 1), end=c(.y, 4)))) %>% 
    as.tibble() 

# A tibble: 7 x 3 
# yr_start yr_end ts.object 
#  <int> <dbl> <list> 
#1  1999 2008 <S3: ts> 
#2  2000 2008 <S3: ts> 
#3  2001 2008 <S3: ts> 
#4  2002 2008 <S3: ts> 
#5  2003 2008 <S3: ts> 
#6  2004 2008 <S3: ts> 
#7  2005 2008 <S3: ts> 

df_ts <- df %>% 
    mutate(ts.object = map2(yr_start, yr_end, ~ window(austourists, start=c(.x, 1), end=c(.y, 4)))) %>% 
    as.tibble() 

Hier sind die letzten beiden Zeilen in ts.object Spalte:

df_ts$ts.object[[6]] 
#   Qtr1  Qtr2  Qtr3  Qtr4 
#2004 41.27360 26.65586 28.27986 35.19115 
#2005 41.72746 24.04185 32.32810 37.32871 
#2006 46.21315 29.34633 36.48291 42.97772 
#2007 48.90152 31.18022 37.71788 40.42021 
#2008 51.20686 31.88723 40.97826 43.77249 

df_ts$ts.object[[7]] 
#   Qtr1  Qtr2  Qtr3  Qtr4 
#2005 41.72746 24.04185 32.32810 37.32871 
#2006 46.21315 29.34633 36.48291 42.97772 
#2007 48.90152 31.18022 37.71788 40.42021 
#2008 51.20686 31.88723 40.97826 43.77249 

Oder verwenden Sie Map von Basis R:

df %>% mutate(ts.object = Map(function(x, y) window(austourists, start=c(x, 1), end=c(y, 4)), yr_start, yr_end)) 
+1

Ah perfekt. Ich spielte mit der Funktion map2, war mir aber nicht sicher, wie ich sie verschachteln sollte. Danke, das funktioniert wie erwartet! – msubbaiah