【问题标题】:Fastest alternative to rbind.fill [duplicate]rbind.fill 的最快替代品[重复]
【发布时间】:2021-11-02 00:04:32
【问题描述】:

rbind.fill 的最快替代方法是什么?我有一个数据框列表(都具有相同的列名),并且想创建一个在每个数据框(或与之等效的东西)上使用rbind 的大数据框。任何解决方案,包括tidyverse 都是好的。

【问题讨论】:

  • dplyr::bind_rows(x), data.table::rbindlist(x), base do.call(rbind, x) 都非常快,rbinding 一次一帧(这是第二圈在R Inferno 中,"Growing Objects")。

标签: r dataframe tidyverse rbind


【解决方案1】:

Ashwin Malshé 在 2018 年对 rbindbind_rowsrbindlist 进行的速度比较中https://rstudio-pubs-static.s3.amazonaws.com/406521_7fc7b6c1dc374e9b8860e15a699d8bb0.html

按升序排列:

  1. 来自data.tablerbindlist 是最快的。它比dplyrbind_rows 快两倍以上。

  2. dplyr中的bind_rows,比base R中的rbind快10倍以上

  3. rbindbase R

在所有 3 个模拟中肯定有一些极值,但中位数接近均值,表明极值的影响很小!

【讨论】:

    【解决方案2】:

    如果数据帧在列表中,则基本的 R Reduce 函数可以将它们全部重新绑定。例如,

    df1 <- mtcars
    df2 <- df1
    df3 <- df2
    mylist <- list(df1, df2, df3)
    rbindall <- Reduce(rbind, mylist)
    

    【讨论】:

    • 虽然Reduce 的使用在 R 圈子中是令人钦佩的并且相对比较多,但我喜欢这个,因为它实际上是性能方面的 最慢 选项(由于内存分配以及rbind.data.frame 如何在后台工作)。数量级,即使数据不多。 (我不知道任何合理的方法实际上更慢且内存效率更低。R 擅长很多事情,这不是一个很好的例子:-)。很好的代表答案,只是一个反模式。
    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2016-06-13
    • 2012-10-05
    相关资源
    最近更新 更多