[R语言学习笔记] - 合并行操作中data.frame与data.table的性能比较

测试案例说明

  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。
操作组合耗时说明
1data.frame + base::rbind110ms左右)这个应该是大部分人的常用组合
1data.table + base::rbind13ms左右
2data.frame + dplyr::rbind13ms左右
3data.table + dplyr::rbind13ms左右
3data.frame + data.table::rbindlist0.132ms左右
3data.table + data.table::rbindlist0.139ms左右
4data.frame + dplyr::rbind_list1.15ms左右
4data.table + dplyr::rbind_list1.57ms左右

操作结果2

说明:

  1. M=40000。总据数据为40000*N条左右。ncol=25。
操作组合耗时说明
1data.frame + base::rbind659ms左右)N=10。这个应该是大部分人的常用组合
1data.table + base::rbind140ms左右N=10
2data.frame + dplyr::rbind318ms左右N=10
3data.table + dplyr::rbind331ms左右N=10
3data.frame + data.table::rbindlist33ms左右N=100
3data.table + data.table::rbindlist339ms左右N=100
4data.frame + dplyr::rbind_list67ms左右N=100
4data.table + dplyr::rbind_list670ms左右N=100

结论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值