【问题标题】:Stepwise left_join/merge逐步left_join/merge
【发布时间】:2019-02-04 13:32:37
【问题描述】:

我有一个 250k 观察值的主 df,我想向其中添加一组变量,由于 left_join/merge 函数的限制,我必须以较小的 dfs(每个 50k 观察值的 5 个不同 dfs)计算这些变量行大小(2^31-1 个观察值)。

我现在尝试在主 df 和 5 个较小的 df 上使用 left_join 或 merge-functions 将新变量的列添加到主 df,以便在每个步骤中进行 50k 次观察。

mainFrame <- left_join(mainFrame, newVariablesFirstSubsample)
mainFrame <- left_join(mainFrame, newVariablesSecondSubsample)
mainFrame <- left_join(mainFrame, newVariablesThirdSubsample)
mainFrame <- left_join(mainFrame, newVariablesFourthSubsample)
mainFrame <- left_join(mainFrame, newVariablesFifthSubsample)

在第一个 left_join(包括前 50k 个观察值的新变量值)之后,当我运行第二个到第五个 left_joins 时,R 似乎不包含以下 50k 个观察值组的任何值。我通过在每个 left_join 之后为各个列构建汇总统计数据得出这个结论。

知道我做错了什么或可能使用哪些其他功能吗?

【问题讨论】:

  • 您好,您是否尝试过使用data.table?我不记得有 2^31-1 观察的限制
  • 我没有 - 使用 data.table 将如何工作?
  • merge: merge(dt1, dt2, by.x=c("X","Y"), by.x=c("Z","K"), all.x=T, all,y=F) 的左连接相同。你可以先把你的数据框变成数据表:mainFrame &lt;- as.data.table(mainFrame)
  • 它只是给了我错误:as.vector(x, mode) 中的错误:无法将“内置”类型强制转换为“任何”类型的向量
  • 如果每次加入后行数都在增加,这意味着你加入的任何列都不是唯一的——这可能很糟糕。

标签: r dplyr


【解决方案1】:

数据表允许您创建“键”,它们是 R 版本的 SQL 索引。这将帮助您加快搜索 R 用于合并或左连接的列。

如果我是你,我会将它们全部导出到 csv 文件中,然后通过 SQL 或使用 SSIS 服务来计算它们。

我注意到的问题是您从汇总统计数据中意识到了错误。您是否尝试过颠倒插入表格的顺序。或者明确说明左连接中使用的列的名称?

请告诉我们结果。

【讨论】:

  • 我按照你的建议恢复了插入表格的顺序,结果真的让我更加困惑:我首先离开了最后一个子样本,它的作用是给我同样的错误当我加入整个样本时给我:left_join_impl(x, y, by_x, by_y, aux_x, aux_y, na_matches) 中的错误:std::bad_alloc。这意味着,错误不是源于样本太大,我回到“开始”。
  • 尝试查看两个数据框中的列名(它们匹配吗?)。我对在R中使用left_join不太感兴趣,尝试使用合并并将相应的值分配给by.x = nameColumnLeftTable和by.y = nameColumnRightTable
  • 它们具有完全相同的名称、长度和类别。当我使用合并时,它给了我以下错误:merge.data.frame() 中的错误:不允许负长度向量。
猜你喜欢
  • 2020-06-12
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2021-11-06
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多