从 R 中的列表中提取值:Arima 函数的一个例子

Extract values from a list in R: A case of Arima function

我必须用 Arima 函数 处理我的数据系列。这导致 list 我希望将其转换为 dataframe 以便更好地操作。

为了重新创建示例,我将使用以下 数据框:

   df <-  data.frame(
      stringsAsFactors = FALSE,
                Season = c("Summer 1998",
                           "Winter 1998-1999","Summer 1999","Winter 1999-2000","Summer 2000",
                           "Winter 2000-2001","Summer 2001","Winter 2001-2002",
                           "Winter 2003-2004","Summer 2009","Winter 2009-2010",
                           "Summer 2010","Winter 2010-2011","Summer 2011",
                           "Winter 2011-2012","Summer 2012","Winter 2012-2013","Summer 2013",
                           "Winter 2013-2014","Summer 2014","Winter 2014-2015",
                           "Summer 2015","Winter 2015-2016","Summer 2016",
                           "Winter 2016-2017","Summer 2017"),
            Luxembourg = c(30.86,39.77,23.71,37.67,
                           35.66,39.45,37.49,29.28,24.01,30.19,24.24,35.26,35.9,
                           27.3,39.53,36.9,30.3,45.85,29.52,35.3,27.34,
                           57.74,26.83,51.19,21.2,29.89),
               Germany = c(NA,NA,NA,16.48,33.34,35.39,
                           27.04,25.53,21.65,31.77,19.43,29.35,26.94,19.37,
                           36.69,44.23,21.36,36.17,39.41,48.24,21.35,NA,NA,
                           NA,NA,NA),
                France = c(NA,NA,NA,16.48,33.34,35.39,
                           26.74,23.68,19.06,34.01,17.15,18.69,28.33,20.33,
                           30.64,40.31,20.24,36.17,40.14,45.25,20.17,NA,NA,
                           NA,NA,NA),
                Greece = c(NA,NA,NA,16.73,41.81,31.91,
                           27.25,29.75,18.82,33.8,21.47,18.54,25.39,20.64,
                           42.94,16.73,26.09,58.06,23.02,46.77,26.34,NA,NA,
                           NA,NA,NA),
                 Spain = c(NA,NA,NA,16.73,41.81,31.91,
                           27.25,29.75,18.82,29.46,18.72,18.86,20.08,18.32,
                           35.14,19.99,24.75,34.19,28.48,33.49,23.56,NA,NA,
                           NA,NA,NA)

    #Apply arima function to my data frame
library(forecast)
    results_1 <- sapply(df[-1], Arima, order = c(1,0,0))

结果如下:

要提取 拟合值 并将它们转换为 数据框 我编码:

results_2 <- cbind(df[1],do.call(cbind, 
                                 lapply(df[-1], function(x) as.numeric(Arima(x)$fitted, order = c(1,0,0)))))

结果如下 table:

这不是我从 results_1

得到的 拟合值

我想提取每个国家的拟合值并将它们转换成数据框。

如有任何帮助,我们将不胜感激!

order 参数应该在 Arima 函数内。

results_2  <- cbind(df[1],do.call(cbind, lapply(df[-1], function(x) 
                     as.numeric(Arima(x, order = c(1,0,0))$fitted))))

你应该unlist然后重新组装成数据帧

results_2 <- as.data.frame(matrix(unlist(results_1['fitted',]),ncol = 5, byrow = F))
results_2 <- cbind(df$Season, results_2)
colnames(results_2) <- c('Season',colnames(results_1))
    
results_2