【问题标题】:R name dataframe from i in loop循环中来自 i 的 R 名称数据框
【发布时间】:2015-11-05 11:45:59
【问题描述】:

我有以下代码,我想将由 sqldf 创建的数据框命名为 t2_value_of_i。然后我想将这些文件附加到一个文件中,推荐的方法是什么?下面的迭代在整个循环中覆盖为 t2_i。谢谢。

m4<-data.frame(m3[-1,])

colnames(m4)<-c("iteration_criteria")
m4$iteration_criteria<-as.character(m4$iteration_criteria)


m4.list <-vector("list", nrow(m4))


for (i in 1:nrow(m4)) {
  m4.list[[i]] <- m4[i,] }

for (i in m4.list){


t2_i<-sqldf(print(paste(
"select a.*, b.iteration_criteria
 from data_by_zone_final a left join t1 b  on
                  (a.state_long=b.state_long) and 
                  (a.state_short=b.state_short) and 
                  (a.state_subregion_name=b.state_subregion_name)
where (a.local_hour_final=17) and b.iteration_criteria='",m4.list,"'",sep="" )     ))
}

【问题讨论】:

  • t2_i = rbind(t2_i, sqldf(...) ?您的对象的尺寸和类型是多少?
  • 执行此操作的方法是使用分配,但您应该知道这可能不是解决问题的最佳方法
  • 不要使用名为 m1m2m3、...、use a list of data frames instead 的数据框。我看到你已经以某种方式使用了一个列表,但是一直使用它!

标签: r loops sqldf


【解决方案1】:

您可以使用pastepaste0结合assign更新变量名,如下:

final = c()
for (i in m4.list){
  temp <- assign(paste0('t2_', i), sqldf(print(paste(
    "select a.*, b.iteration_criteria
     from data_by_zone_final a left join t1 b  on
                      (a.state_long=b.state_long) and 
                      (a.state_short=b.state_short) and 
                      (a.state_subregion_name=b.state_subregion_name)
    where (a.local_hour_final=17) and b.iteration_criteria='",m4.list,"'",sep="" )     
  )))
  final <- rbind(final, temp)
}

【讨论】:

  • 谢谢,正在做我需要做的事情,但是,我需要附加每个数据帧,您有什么建议吗?
  • 对不起,我在发布答案时没有注意到这一点。你需要中间结果吗?如果不是,@mts 的答案更合适。
  • 我确实需要中间结果,在我进行了 sqldf join 之后,我计划通过以下回归 t2_i_prediction_temp
  • 我编辑了问题以满足您的需求。它受到@mts 的回答的启发,应该可以解决问题。它在我运行的模拟中工作。
【解决方案2】:

如果你不需要中间结果,你可以马上rbind到你的最终对象:

final = c()
for (i in m4.list){
  temp = sqldf(print(paste(
    "select a.*, b.iteration_criteria
    from data_by_zone_final a left join t1 b  on
    (a.state_long=b.state_long) and 
    (a.state_short=b.state_short) and 
    (a.state_subregion_name=b.state_subregion_name)
    where (a.local_hour_final=17) and b.iteration_criteria='", i,"'",sep="" )     ))
  final = rbind(final, temp)
}

【讨论】:

  • 数据框“最终”没有产生在该数据框中进行所有迭代的预期结果,您有什么建议吗?它只有最后一个文字“temp”
  • @tcc 我复制了您的原始查询,但我认为您必须将查询中的 m4.list 替换为 i,我刚刚编辑了我的答案,检查一下,恐怕我没有重现您的问题的数据。
  • 其实这是对的,我的错误是我的 where 语句中有 m4.list,@Paulo MiraMor 帮助我识别了它。谢谢你们两个!我是 R 新手,所以这对我来说是一条学习曲线。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多