【问题标题】:Merge rows by "Key" column for a large data table in R (more than 30 million rows)R中大型数据表的“键”列合并行(超过3000万行)
【发布时间】:2018-04-11 13:38:14
【问题描述】:

我正在尝试基于公共列“键”合并两个数据表 A 和 B 的行,但 R 无法处理合并如此大的数据表。它大约有 3000 万行 有什么方法可以将它们合并到数据表中或转换为列表?

编辑:

我试过了

merge(dt1,dt2, by ="key", all.x = TRUE) 

我说错了

错误:无法分配大小为 802 Mb 的向量

这是我的数据的示例

数据表1

 key ||   age || ctg || total_spend
==================================
key1 ||    45 ||   1 ||    1026
key2 ||    26 ||   2 ||    1574
key3 ||    45 ||   1 ||    64
key4 ||    32 ||   1 ||    1610
key5 ||    41 ||   1 ||    884

数据表2

key  ||   age || ctg || total_income (lacs)
==========================================
key1 ||    45 ||   1 ||    7.5
key2 ||    26 ||   2 ||    6
key3 ||    45 ||   1 ||    4
key5 ||    41 ||   1 ||    5.3

【问题讨论】:

  • 你试过什么?这些试验的结果是什么?
  • 我没有得到结果。我尝试了 merge(dt1,dt2, by ="key", all.x = TRUE).. 我收到错误消息“错误:无法分配大小为 802 Mb 的向量”
  • 您的计算机有多少内存可用?你在使用data.table 包吗? benchmarks 有多达 20 亿 = 20 亿行。 (需要足够大的硬件。)
  • 您可以考虑将数据存储在内存中的替代方法,例如 SQL 类型的数据库。对于大型数据集,我使用 MonetdbLite 包取得了很好的成功(参见github.com/hannesmuehleisen/MonetDBLite-R
  • edit 提出您的问题并提供minimal reproducible example 包括您的样本的预期输出(希望能代表您的完整数据集。) - 谢谢。

标签: r list merge data.table


【解决方案1】:

如果有足够的 RAM,data.table 包应该能够合并两个表:

library(data.table)
setDT(dt1, key = "key")
setDT(dt2, key = "key")
dt1[dt2]

【讨论】:

  • 谢谢你.. 但这无济于事。两个表中的行号不同。所以它会抛出一个错误。当我再次选择 EACHi = TRUE 时,它会给出内存分配错误。我已经为内存做好了准备,但是数据量很大,因此这对我来说不起作用
  • @zd06 请问具体的错误信息是什么?而且,EACHi = TRUE 对我来说似乎没有有效的 data.table 语法。
  • @Ralf 在我从环境中删除不必要的数据后,你建议的代码有效。我猜那是内存分配问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2013-05-16
  • 2013-10-22
  • 2021-09-18
  • 2011-05-29
相关资源
最近更新 更多