【问题标题】:Appending rows to DataFrame within a Loop在循环中将行附加到 DataFrame
【发布时间】:2021-04-01 22:09:05
【问题描述】:

我正在尝试在循环的每次迭代中向数据框添加新的一行。

我想使用我的训练集估计模型,记录估计,并不断将结果添加到数据框中,同时向我的训练集添加新的观察结果。

这是我目前的代码


forecast.table <- tibble()


colnames(forecast.table) <- c('.model', 'Quarter', 
                              'demeaned.d1.ln.Finished', '.mean')


for(i in c(0:32)){
  
  df.training.loop <- df[1:(which(as.character(df$Quarter) == '2000 Q1')+i), 
                           c('Quarter', 'demeaned.d1.ln.Finished')]
  
  model <- df.training.loop %>% 
    model(ARIMA(demeaned.d1.ln.Finished ~ pdq(3,0,0) + PDQ(0,0,0),
                fixed = list(ar1 = 0.387, ar2 = 0.206, ar3 = 0.226)))
  
  forecast <- model %>%
    forecast(h=1)
  

  
  forecast.table <- rbind(forecast.table, forecast)  

}  

所以基本上我的想法是创建一个空数据帧,然后开始循环尝试将数据帧的行(预测)添加到空数据帧。

非常感谢所有帮助!

【问题讨论】:

  • 你对forecast.table的发起是0x 0

标签: r dataframe merge


【解决方案1】:

lapply 中执行此操作可能更容易,循环从 0 到 32 的值范围,子集数据集“df”,构造 model,获取 forecastrbind list 元素与do.call

forecast.table <- do.call(rbind, lapply(0:32, function(i) {
     df.training.loop <-   df[1:(which(as.character(df$Quarter) == '2000 Q1')+i), 
                       c('Quarter', 'demeaned.d1.ln.Finished')]
      model <- df.training.loop %>% 
model(ARIMA(demeaned.d1.ln.Finished ~ pdq(3,0,0) + PDQ(0,0,0),
            fixed = list(ar1 = 0.387, ar2 = 0.206, ar3 = 0.226)))

  forecast <- forecast(model, h = 1)
 forecast
      }))

使用tibble() 初始化会创建一个 0 x 0 tibble,因此不会分配列名

forecast.table <- tibble()

【讨论】:

    【解决方案2】:

    另一种方法如下:

    forecast.table <- NULL
    
    for(i in c(0:32)){
      
      df.training.loop <- df[1:(which(as.character(df$Quarter) == '2000 Q1')+i), 
                               c('Quarter', 'demeaned.d1.ln.Finished')]
      
      model <- df.training.loop %>% 
        model(ARIMA(demeaned.d1.ln.Finished ~ pdq(3,0,0) + PDQ(0,0,0),
                    fixed = list(ar1 = 0.387, ar2 = 0.206, ar3 = 0.226)))
      
      forecast <- model %>%
        forecast(h=1)
      
      forecast.table <- bind_rows(forecast.table, forecast)
    
    }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-10
      • 2019-04-13
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      相关资源
      最近更新 更多