【问题标题】:Extract values from a list in R: A case of Arima function从 R 中的列表中提取值:Arima 函数的一个案例
【发布时间】:2021-06-25 13:52:06
【问题描述】:

我必须使用 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)))))

结果如下表:

这不是我从results_1得到的拟合值

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

任何帮助将不胜感激!

【问题讨论】:

    标签: r list dataframe arima


    【解决方案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))))
    

    【讨论】:

      【解决方案2】:

      你应该 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-24
        • 1970-01-01
        • 2021-07-23
        相关资源
        最近更新 更多