R 按组运行回归并将预测值粘贴到原始数据框中-提供示例代码

R 按组运行回归并将预测值粘贴到原始数据框中-提供示例代码,r,rstudio,regression,predict,R,Rstudio,Regression,Predict,我有一个代码,用于生成自动回归。但我正在努力实现一个预测函数,将预测粘贴到每个日期的原始数据集中 谢谢, 到目前为止,我已经: test = df[(df$key==1 | df$key==2),] df_list=split(test, test$key) reg_results = lapply(df_list,function(temp) { good_cols=sapply(temp,function(x){ is.numeric(x) && ((max(

我有一个代码,用于生成自动回归。但我正在努力实现一个预测函数,将预测粘贴到每个日期的原始数据集中

谢谢,

到目前为止,我已经:

test = df[(df$key==1 | df$key==2),]

df_list=split(test, test$key)
reg_results = lapply(df_list,function(temp) {

  good_cols=sapply(temp,function(x){
    is.numeric(x) && ((max(x)-min(x))>10000)
  })

  temp=temp[,good_cols]
  fit=step(lm(y~.,data=temp))
  return(fit)
})

df_list_summary = lapply(reg_results, function(model_output){
  broom::tidy(model_output)
})
final_step2 = dplyr::bind_rows(df_list_summary, .id="Key's")
readr::write_csv(final_step2,"test2.csv")
样本df:

   Key  Date                     y   x1   x2   x3
   1    1/10/2018 12:00:00 AM    2   3    2    5
   1    1/11/2018 12:00:00 AM    3   5    7    2
   1    1/12/2018 12:00:00 AM    5   7    4    7 
   1    1/13/2018 12:00:00 AM    7   2    7    6
   2    1/10/2018 12:00:00 AM    2   6    3    8
   2    1/11/2018 12:00:00 AM    3   7    7    3
   2    1/12/2018 12:00:00 AM    3   2    3    4
   2    1/13/2018 12:00:00 AM    7   6    2    7
预期结果:

   Key  Date                     y   x1   x2   x3  predicted values for each date
   1    1/10/2018 12:00:00 AM    2   3    2    5   ...
   1    1/11/2018 12:00:00 AM    3   5    7    2   ...
   1    1/12/2018 12:00:00 AM    5   7    4    7   ...
   1    1/13/2018 12:00:00 AM    7   2    7    6   ...
   2    1/10/2018 12:00:00 AM    2   6    3    8   ...
   2    1/11/2018 12:00:00 AM    3   7    7    3   ...
   2    1/12/2018 12:00:00 AM    3   2    3    4   ...
   2    1/13/2018 12:00:00 AM    7   6    2    7   ...
到目前为止,我所做的一切都无济于事:

test2 = df[(df$key==1 | df$key==2),]

unsplit(lapply(split(test, test$key),function(w){
reg_results = lapply(df_list,function(temp) {

  good_cols=sapply(temp,function(x){
    is.numeric(x) && ((max(x)-min(x))>10000)
  })

  temp=temp[,good_cols]
  fit=lm(y~.,data=temp)
})
  cbind(w,predict(fit,subset(df, key=="1" | key=="2")))
}),test$key)

df_list_summary = lapply(reg_results, function(model_output){
  broom::tidy(model_output)
})
final_step2 = dplyr::bind_rows(df_list_summary, .id="key's")
readr::write_csv(final_step2,"test2.csv")
更新: 所以Flick先生的代码起作用了;然而,我正试图找出如何将代码应用于out_of_sample_df。有人能帮忙吗

 test = df[(df$key==1 | df$key==2),]

df_list=split(test, test$key)
reg_results = lapply(df_list,function(temp) {

  good_cols=sapply(temp,function(x){
    is.numeric(x) && ((max(x)-min(x))>10000)
  })

  temp=temp[,good_cols]
  fit=step(lm(y~.,data=temp))
  return(fit)
})


#MrFlicks contribution - need help to adjust this line of code to apply to out of sample data to produce prediction results. Currently this line of code inserts pred column inside original data set.

    reg_predict = dplyr::bind_rows(Map(function(data, model) {
           data.frame(data, pred=predict(model))    }, df_list, reg_results))


df_list_summary = lapply(reg_results, function(model_output){
  broom::tidy(model_output)
})
final_step2 = dplyr::bind_rows(df_list_summary, .id="Key's")
readr::write_csv(final_step2,"test2.csv")
谢谢,

您可以使用
Map()
对数据和模型进行迭代,以获得所需的结果。从原始代码开始,您可以这样做

reg_predict = dplyr::bind_rows(Map(function(data, model) {
    data.frame(data, pred=predict(model))
}, df_list, reg_results))

你到底被卡在哪里了?你试了什么?您遇到的具体问题是什么?我正在尝试各种方面,无法将预测函数应用于指定的空间。更新OP以显示我的尝试和错误far@MrFlick你能帮我完成下面的工作吗?嗨,Flick先生,你能告诉我这行代码将在哪里合并到我的原始代码中吗?嗨,Flick先生,谢谢你,我相信当我把它放在我初始代码的底部时,它起了作用。如果我想预测样本外测试,并更改df,因为这是样本内预测。如何正确调整代码?下面是我尝试过的,但我得到了错误:
reg_predict=dplyr::bind_rows(Map(函数(数据,模型){data.frame(数据,pred=predict(模型,子集(df_out of sample,key==1 | key==2)),df_list,reg_results))
由于初始代码生成回归,我想调整您所做的代码,以便在样本之外的数据帧上创建预测,并像上面的代码那样包含其适合性。这目前调整了我现有的数据集。如果这有意义。如果有人能提供帮助,我将不胜感激,但仍然无法解决。