library(fpp)
library(purrr)
library(tidyr)
data(austourists)
tr <- window(austourists,end=c(2007,12))
te <- window(austourists, start=c(2008,1))
我有来自FPP包的澳大利亚游客数据。我想创建多个基于不同起始年份修剪的时间序列对象。
df <- as.data.frame(1999:2005)
colnames(df) <- "yr_start"
df$yr_end <- 2008
我想重复上面的窗口函数,但是df
中的给定输入。我试图使用map
和nest
创建一个时间序列对象并将其嵌套到位。
我的目标是建立一个结构为
的数据帧 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>
目标是稍后使用这些ts对象在这些ts对象上使用map函数运行指数平滑模型。
答案 0 :(得分:2)
您可以使用map2
覆盖yr_start
和yr_end
列,并为每对ts
年构建一个start-end
对象:
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()
以下是ts.object
列中的最后两行:
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
或者使用基础R的Map
:
df %>% mutate(ts.object = Map(function(x, y) window(austourists, start=c(x, 1), end=c(y, 4)), yr_start, yr_end))