合并data.tables列表

use*_*111 23 r data.table

是否有一种特定的方法来组合R中的data.tables列表?

我有一个~20个data.tables的列表,每个都有大约100万行,并希望将它们组合成一个包含2000万行的data.table.

我一直在这样做

Reduce('rbind', data.table)
Run Code Online (Sandbox Code Playgroud)

但它需要一段时间.

TNX!

Cha*_*ase 22

使用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
Run Code Online (Sandbox Code Playgroud)

编辑 - 结合马特的答案

我没有意识到data.table这个任务有特定的功能.对于球场而言,它非常快.以下是相关时间:

system.time(out3 <- rbindlist(yourList))
#-----
   user  system elapsed 
   0.07    0.03    0.11 

all.equal(out1,out3)
#-----
[1] TRUE
Run Code Online (Sandbox Code Playgroud)


Mat*_*wle 22

查看?rbindlist和这些相关问题(当您知道要搜索的内容时更容易找到!):

data.table问题和答案包含 rbindlist

  • 不知道你已经专门为此任务合并了一个功能.干得好,而且平常 - 它很快. (2认同)