【问题标题】:Add observations found in a data frame to a much larger data frame in R将在数据框中找到的观察结果添加到 R 中更大的数据框中
【发布时间】:2014-12-16 02:32:59
【问题描述】:

我需要每天用较小的数据框 (b) 多次更新大数据框 (a)。两个数据框共享相同数量的变量和相同的列类结构。唯一的区别是观察的数量和观察本身。我在这个网站上花了几个小时,其他人试图找出解决方案。我终于让merge() 为小型数据框工作(每个 96 个变量的 313 个观察值)。

merge(a,b,all=T)

但是,当我尝试对更大的数据框(约 150 万个 96 个变量的观测值)运行相同的操作时,我得到了

错误:无法分配大小为 1.6 Gb 的向量。

根据 Windows 任务管理器,我有 ~12 Gb 的可用物理内存。我从gc() 函数开始,以确保我拥有尽可能多的内存,但它仍然无法工作。是否有另一个函数可以简单地将观察结果添加到现有数据框中?我尝试了其他几个,但结果不是具有相同结构的数据框。

如果您还不能确定,我是 R(和这个论坛)的新手。我开始学习 Stata,有人说服我在深入学习之前转向 R。在 Stata 中,这是一个简单的操作

clear

use a

append using b

这在 Stata 中没有任何问题地完成了工作,而且速度很快(不到几秒钟)。

有人可以帮忙吗? 谢谢!

【问题讨论】:

  • 尝试使用包dplyr,使用dplyr:inner_join()。对于大型合并操作,它应该更高效、更快。
  • 另外gc() 也不是清除内存的好方法。我建议在尝试进行合并之前重新启动您的 rsession。在进行合并时,还要在 Windows 任务管理器中查看您的内存使用情况。

标签: r merge dataframe append


【解决方案1】:

查看此问题的答案:R: how to rbind two huge data-frames without running out of memory

如果您的数据在 SQLite 数据库中,您可以使用 sqldf 包。否则,您应该考虑使用 data.table 包。

【讨论】:

    【解决方案2】:

    我最终采用了一个相对简单的解决方案,将较大的数据框分解为几个较小的数据框,然后使用 rbind(a,b)。虽然这需要我一些额外的代码来处理新的数据结构,但它允许我处理更小的数据帧,并且通过在不需要时删除所有无关数据实际上加快了处理时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多