【问题标题】:convert list into a data frame. A case of auto.arima function将列表转换为数据框。 auto.arima 函数的一个案例
【发布时间】:2021-09-08 05:30:34
【问题描述】:

我有时间序列,必须使用 auto.arima 函数进行校正。我获得了结果,但我在排列数据方面遇到了麻烦。为了重现该问题,我将使用以下数据框。

df <- data.frame(
  stringsAsFactors = FALSE,
            Season = c("Winter 1996-1997",
                       "Summer 1997","Winter 1997-1998","Summer 1998","Winter 1998-1999",
                       "Summer 1999","Winter 1999-2000","Summer 2000",
                       "Winter 2000-2001","Summer 2001","Winter 2001-2002",
                       "Summer 2002","Winter 2002-2003","Summer 2003",
                       "Winter 2003-2004","Summer 2004","Winter 2004-2005","Summer 2005",
                       "Winter 2005-2006","Summer 2006","Winter 2006-2007",
                       "Summer 2007","Winter 2007-2008"),
            France = c(33.83,65.51,26.41,30.86,
                       39.77,23.71,37.67,35.66,39.45,37.49,29.28,51.38,
                       35.93,33.33,24.01,36.03,26.45,16.48,25.72,39.93,41.8,
                       29.31,32.79),
           Germany = c(27.06,35.93,28.92,21.65,
                       25.72,39.93,16.48,33.34,35.39,27.04,25.53,27.06,
                       35.93,28.92,21.65,40.93,18.55,42.34,17.29,21.8,34.95,
                       25.02,29.92),
             Spain = c(42.26,32.91,27.91,19.06,
                       17.29,21.8,16.48,33.34,35.39,26.74,23.68,42.26,32.91,
                       27.91,19.06,38.69,15.02,60.2,16.56,28.72,26.37,
                       22.92,26.88),
        Luxembourg = c(NA,NA,NA,NA,16.56,28.72,
                       16.73,41.81,31.91,27.25,29.75,48.36,24.26,26.24,
                       18.82,33.41,17.56,69.72,17.68,23.08,40.39,22.3,
                       35.61))
library(forecast)

#run auto.arima function and unlist the results in a data frame
library(forecast)
Auto_arima_results <- as.data.frame(do.call(rbind, lapply(df[-1], auto.arima)))

#obtain only the fitted values
Auto_arima_fitted_values <-  Auto_arima_results %>% select(contains("fitted"))

我最终得到以下结果:

但我想获得的是一个数据框,其中:

a) 第 1 列是季节
b) 第 2 到 4 列是国家(法国、德国、西班牙和卢森堡)
c) 这些国家的值是我从 arima 函数获得的拟合值。

任何帮助将不胜感激

【问题讨论】:

    标签: r dataframe lapply arima rbind


    【解决方案1】:

    您只能从输出中提取 fitted 值。

    library(forecast)
    
    result <- cbind(df[1],do.call(cbind, 
                  lapply(df[-1], function(x) as.numeric(auto.arima(x)$fitted))))
    
    #             Season   France  Germany    Spain Luxembourg
    #1  Winter 1996-1997 34.46957 28.32021 28.45043   28.84253
    #2       Summer 1997 34.46957 30.28881 28.45043   35.91868
    #3  Winter 1997-1998 34.46957 23.79553 28.45043   30.73889
    #4       Summer 1998 34.46957 25.44389 28.45043   35.84627
    #5  Winter 1998-1999 34.46957 34.24603 28.45043   25.16294
    #6       Summer 1999 34.46957 34.21670 28.45043   29.38004
    #7  Winter 1999-2000 34.46957 21.22659 28.45043   31.36506
    #8       Summer 2000 34.46957 33.50654 28.45043   30.30014
    #....
    #....
    #....
    

    【讨论】:

    • 我得到以下信息:Warning message: In (function (..., deparse.level = 1) : number of rows of result is not a multiple of vector length (arg 4 但它有效。非常感谢!!
    猜你喜欢
    • 2022-08-13
    • 1970-01-01
    • 2014-10-18
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2011-05-12
    • 2013-09-26
    相关资源
    最近更新 更多