【问题标题】:Merge with large dataset: negative length vectors are not allowed与大型数据集合并:不允许负长度向量
【发布时间】:2021-11-11 18:41:59
【问题描述】:

我需要合并 2 个巨大的数据集 (left_join)。每个数据集有 15mio 行。

我尝试了不同的方法来合并它们,但总是有错误消息:

例如,数据集 X 有变量 NAMEvalue_Q1,数据集 Y 有变量 NAME value_Q2

Try1 <- left_join(X, Y)
  • 错误:无法分配大小为 19251.5 Gb 的向量
Try2 <- merge(X, Y, by = "NAME", all.x =TRUE)
  • 错误:不允许负长度向量
Try3_1 <- merge(X[1:10000000,], Y, by = "NAME", all.x =TRUE)

-工作

Try3_2 <- merge(X[10000001:nrow(X),], Y, by = "NAME", all.x =TRUE)
  • 错误:不允许负长度向量

Try3_2 的结果最让我吃惊,因为 Try3_1 可以处理 10mio 行,但 Try3_2 不能只处理 5mio 行。 R 中的merge 是如何工作的?

最后,我还用数据表尝试了上面的代码,错误消息说结果超过 2^31 行。

【问题讨论】:

  • 从 15mio 行到 2^31 行听起来像是得到了类似笛卡尔的连接,这对于 base::mergedplyr::*_joindata.table-merges 来说非常困难。 Try3_1 产生了多少行?您是否省略了要加入的键?
  • 顺便说一句,你有X(大写)但你正在做:nrow(x)(小写)。也许这会导致问题?
  • 非常相关,可能是重复的:stackoverflow.com/q/42479854/3358272。检查sum(duplicated(X[,c("NAME")])(和Y)以查看您是否/有多少重复行。
  • 在 Try3_1 中,结果中有 10mio 行。我只需要 Y 中与 X 匹配的值,因此发生了左连接。
  • 2. nrow(x) 在我的问题中是一个打字错误,在我的程序中我是正确的。 3. X 和 Y 都没有重复。

标签: r


【解决方案1】:

请确保您的数据中没有 NA 行。我刚刚发现数据中有空行。删除这些行后,代码起作用了!

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 2018-02-08
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 2022-07-19
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多