用 rbind 附加数据帧的神秘问题

Posted

技术标签:

【中文标题】用 rbind 附加数据帧的神秘问题【英文标题】:Mysterious problems appending data frames with rbind 【发布时间】:2012-12-29 21:36:07 【问题描述】:

我正在尝试将多个文件合并到一个主文件中。有 5 个结构相同的文件,我可以毫无问题地将每个文件单独读入数据框中。我什至为 200 多个变量手动设置列类,而不是让 R 决定,因为我认为这是导致问题的原因。但是,将任意两个文件附加在一起会导致内存不足。

警告信息: 1:在 rbind(deparse.level, ...) 中: 已达到 4043Mb 的总分配:请参阅 help(memory.size)

所以我做了一些实验: 我将两个不同的文件 1 块连接在一起。这样可行。 我将文件 2 的一部分加入到文件 1 的一部分中。这行得通。 我将文件 2 的一大块加入到原始文件 1 中。这行得通。

每个文件的大小都略低于 200MB,所以我不确定我是否应该耗尽内存。如果有人感兴趣,数据来自hearstchallenge.com。比赛已经结束了,我们只是将数据用于分析实验(而不是编程!)。

对于如何解决这个问题有什么建议吗?

【问题讨论】:

+1 表示“泡菜的小菜”。您遇到的问题是 R 需要 4043 MB 的连续内存才能完成操作。我想你没有那么多闲钱。您可以尝试使用像sed 这样的命令行工具来加入R 之外的文件,或者像ff 这样的大数据包之一。 write.table 也有一个append 选项。 > system("cat file1 file2 file3 file4 file5 >>big.ass.file") data.table 包中查看rbindlist,我认为... 糟糕——使用shell 将比使用system 容易得多 【参考方案1】:

我也遇到过类似的问题。解决方案是不要在大数据上使用 rbind() 或 cbind()。他们倾向于泄漏内存。

要仅使用 R 来解决您的问题,请首先创建一个数据框,该数据框具有在您将各个部分放在一起后数据框将具有的维度。然后使用 assignments 填充大数据框。

【讨论】:

对于大数据,不要使用data.frames,使用data.tables。

以上是关于用 rbind 附加数据帧的神秘问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 合并和附加多个 CSV/数据帧的最快方法

如何将每一行熊猫数据帧附加到另一个数据帧的每一行

用于附加和创建pandas数据帧的快速numpy数组结构

一次追加多个 pandas 数据帧

附加到大型 data.frame 并达到内存限制

带有神秘附加字符的 Javascript Date getTime() 代码片段