【问题标题】:Combine a list of data.tables组合 data.tables 列表
【发布时间】:2012-08-28 10:11:40
【问题描述】:

有没有一种特定的方法可以在 R 中组合 data.tables 列表?

我有一个大约 20 个 data.table 的列表,每个都有大约 100 万行,我想将它们组合成一个有 2000 万行的 data.table。

我一直在这样做

Reduce('rbind', data.table)

但这需要一段时间。

Tnx!

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    请参阅?rbindlist 和这些相关问题(当您知道要搜索什么时更容易找到!):

    data.table questions and answers containing rbindlist

    【讨论】:

    • 不知道你已经为这个任务专门集成了一个功能。干得好,而且像往常一样 - 它非常快。
    【解决方案2】:

    使用do.call 似乎比这个虚构的例子快了大约 10 倍:

    library(data.table)
    
    x1 <- data.table(x = runif(1e6), y = runif(1e6))
    x2 <- data.table(x = runif(1e6), y = runif(1e6))
    
    #20 data.tables all of length 1e6
    yourList <- list(x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2)
    
    system.time(out1 <- Reduce("rbind", yourList))
    #-----
       user  system elapsed 
       3.37    3.03    6.43 
    system.time(out2 <- do.call("rbind", yourList))
    #-----
       user  system elapsed 
       0.33    0.36    0.68 
    all.equal(out1,out2)
    #-----
    [1] TRUE
    

    编辑 - 合并马特的回答

    我没有意识到data.table 有这个任务的特定功能。课程标准杆,速度相当快。以下是相关时间:

    system.time(out3 <- rbindlist(yourList))
    #-----
       user  system elapsed 
       0.07    0.03    0.11 
    
    all.equal(out1,out3)
    #-----
    [1] TRUE
    

    【讨论】:

      【解决方案3】:

      为了我的钱,plyr 包的ldply 是实现此目的的一种方式。我的优点是列表元素的名称被添加为新的第一列,命名为.id

      此外,数据帧列表通常是tapply 的输出,在这种情况下,将整个shebang 替换为ddply

      替代品包括do.call("rbind", mylist) 或lattice 的make.groups(虽然最近没能找到这个)。


      注意:我可能误解了这个问题——我读的是data.frame 而不是data.table。这些技术仍然有效,但我不确定它们是否始终会产生data.table

      【讨论】:

      • OP 有 20 * 100 万行,但是有速度问题需要解决。
      • 公平点,data.table 可以但用于解决一些尴尬的性能问题,虽然包含键控表的成本是明智的,但不清楚是否在这里解决。
      • 是的,但是键入表格并没有涉及到这个特定的问题。一般来说,是的,很高兴看到更多的基准测试分开并将时间报告给setkey。通常这是一次完成,就像在数据库中一样,但仍然相关。无键聚合非常快,因此通常不需要为此设置键。
      猜你喜欢
      • 2019-02-13
      • 1970-01-01
      • 2021-03-22
      • 2012-12-13
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 2019-11-24
      相关资源
      最近更新 更多