Left_join:错误:无法分配大小为“ small” Mb的向量

时间:2018-08-28 16:35:09

标签: r select dplyr left-join

我正在处理相当大的数据框,但极端情况下,该数据框具有约300.000行和1.500变量。因此,在处理这些数据框时,有时会出现错误:

Error: cannot allocate vector of size x.x Gb

通常,这意味着我必须将代码分成较小的步骤,或者必须完全更改方法。

此刻,我正在做几个选择和left_join,看起来像这样:

#Subsetting the main dataframe
df2 <- select(df1, matchcode, x1, x2, x3)
#Joining variables from a third dataframe
df2 <- df2 %>% left_join(select(df3, matchcode, y1, y2, y3), by="matchcode")

选择部分进行得很顺利。但是奇怪的是,当我使用left_join时,出现了这些错误,其中无法分配的数量非常小:

Error: cannot allocate vector of size 2.6 Mb
Error: cannot allocate vector of size 4.0 Mb
Error: cannot allocate vector of size 2.6 Mb

还有其他可能导致我不知道的错误的问题吗?或者我的代码有错误吗?

1 个答案:

答案 0 :(得分:0)

自发布此问题以来,我已经进行了一些研究。我首先认为错误与我的工作空间中对象的数量有关,而事实并非如此。

对我自己的问题最重要的回答(请随意说明)是,无法分配的向量的大小并不一定说明该操作对内存的作用。

事实证明,其中一个错误是由于我试图对两个巨大的数据集进行多对多联接而造成的:

Error: cannot allocate vector of size 140.4 Mb

其他联接是一对多的(确实导致错误大大减少,请参阅原始帖子)。我已经能够通过使用data.table解决方案来加入这些数据框架;

library(data.table)
df1 <- merge(df1, df2, by= "matchcode", all.x = TRUE, allow.cartesian=TRUE)

对于多对多联接,我折叠了一个数据集,因此联接变成了一对多。我希望这会有所帮助。