【R语言】合并行操作中data.frame与data.table的性能比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kuyu05/article/details/83862707

测试案例说明

  1. 总数据量为M*N条。平均的分布在N个data.frame/data.table变量中,每个变量为M行。
  2. 这N个变量存储在list中,以1:N表示。list(data.frame)与list(data.table)。
  3. 将N个变量合并成一个。
  4. N个变量数据格式一致。
  5. 若耗时处于同一量级或比较接近,如11.8,12.8,13.4等,视为同一水平,用同一数据表示。
  6. 用df表示data.frame。
  7. 用dt表示data.table。
  8. 无特殊说明,均为100次循环操作的结果。时间为平均耗时。
  9. 测试平台信息:【cpu】i7-4770。【内存】32G DDR3。
  10. 环境:【R】3.5.1【data.table】1.11.4【dplyr】 0.7.6

操作结果1

说明:

  1. N=20,M=30。总据数据为6000条左右。ncol=11。
操作组合 耗时 说明
1 data.frame + base::rbind 110ms左右) 这个应该是大部分人的常用组合
1 data.table + base::rbind 13ms左右
2 data.frame + dplyr::rbind 13ms左右
3 data.table + dplyr::rbind 13ms左右
3 data.frame + data.table::rbindlist 0.132ms左右
3 data.table + data.table::rbindlist 0.139ms左右
4 data.frame + dplyr::rbind_list 1.15ms左右
4 data.table + dplyr::rbind_list 1.57ms左右

操作结果2

说明:

  1. M=40000。总据数据为40000*N条左右。ncol=25。
操作组合 耗时 说明
1 data.frame + base::rbind 659ms左右) N=10。这个应该是大部分人的常用组合
1 data.table + base::rbind 140ms左右 N=10
2 data.frame + dplyr::rbind 318ms左右 N=10
3 data.table + dplyr::rbind 331ms左右 N=10
3 data.frame + data.table::rbindlist 33ms左右 N=100
3 data.table + data.table::rbindlist 339ms左右 N=100
4 data.frame + dplyr::rbind_list 67ms左右 N=100
4 data.table + dplyr::rbind_list 670ms左右 N=100

结论

  1. 在该场景中,对list数据的合并,使用rbind系列函数比简单的使用for效果强很多。
  2. df+rbind的组合在这次测试中基本垫底。所以如没有特殊需求,还是忘记它吧。
  3. 当数据量特别大,N=100时,dt的优势好像没有了,这里我很看不懂。正常来说,数据量越大,dt的优势越大才对。有人知道的话,也请指教。
  4. 其实针对list结构,还有rlist包的list.rbind可以用,不过性能没有上面的好,胜在对list结构的扩展操作比较多。

猜你喜欢

转载自blog.csdn.net/kuyu05/article/details/83862707