【问题标题】:rbind on a dataset inside a looprbind 在循环内的数据集上
【发布时间】:2015-04-10 08:28:09
【问题描述】:

我有循环两次。在每次迭代结束时,它会创建 两个...“新”...和“不同” 组观察结果.....我将它们存储在数据帧 dataA 和 dataB 中。我正在使用 left_join 组合这两个数据集 dataA 和 dataB 并创建一个最终数据集。

 days = seq(from=as.Date('2011-08-01'), to=as.Date("2011-08-02"),by='days')
 for ( i in seq_along(days) )
 {
   .
   .
   dataA
   .
   .
   dataB
   .
   .
   dataC = left_join(dataA, dataB, by="ID")     

 }

我想要的是在每次迭代后更新数据集 dataC,例如 rbind。在第 1 次迭代结束时,dataC 将有 100 个观察值,在第 2 次迭代时将生成 50 个新观察值,因此这应该更新到 dataC 中,并且 dataC 应该有 100+50 = 150 个观察值。不知道从哪里开始,需要帮助。

【问题讨论】:

    标签: r loops multiple-tables


    【解决方案1】:

    试试这个:

     #initialize a list before the loop
     res<-vector("list",length(days))
     #inside the loop set the i-th element of the list
     res[[i]]<-left_join(dataA, dataB, by="ID")
     #rbind all the elements after the loop
     res<-do.call(rbind,res)
    

    【讨论】:

    • 或者用dplyr::bind_rows代替do.call(rbind)
    【解决方案2】:

    循环之前:

    DataD <- data.frame()
    

    在循环结束时:

    DataD <- rbind(DataD, DataC)
    

    【讨论】:

    • @nicola、Romain 和 maRtin,这很完美,但我想知道如果我增加迭代次数会耗尽内存
    • 您可以在每次迭代中导出一个 csv 表,并在最后合并它们。这应该会减少循环执行期间的内存使用量。
    • 您的建议可能很完美,但我必须考虑如何实施。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多