使用粘贴在dplyr mutate中使用奇怪的内存

时间:2018-06-19 13:55:10

标签: r dplyr

所以我的实际数据集是1600万行,并且是机密的,但是我可以很容易地说明正在发生的事情。我完全不了解这种行为,它在我读过的所有内容中都没有实现,或者至少我认为确实如此。

这是一个带有字符串和日期的数据框(真正的数据框具有更多的列和更多的行)

library(tidyverse)

test = data.frame("a" = letters, 
                  "b" = seq.Date(as.Date("2018-01-01"), 
                                 as.Date("2018-01-26"), "days")
)

我想产生第三列,将前两列粘贴在一起。我是这样的:

finalTest = test %>%
  mutate(c = paste(a, b))

如果我这样做的话,它有1600万行,它的内存从大约2GB变成了将近8GB,并且进程被服务器(具有8GB的RAM)杀死了。

但是,如果我将数据集一分为二,粘贴列,然后进行rbind,那很好,尽管这样做是在创建不必要的对象(整个数据集只有700MB,所以这样做很有意义这些对象适合放入RAM)。

test1 = test %>%
  filter(row_number() <= floor(n()/2)) %>%
  mutate(c = paste(a, b))

test2 = test %>%
  filter(row_number() > floor(n()/2)) %>%
  mutate(c = paste(a, b))

finalTest2 = rbind(test1, test2)

很好。这些对象似乎适合存储在内存中,但是当您对其进行操作时则不适合。但是正在发生的事情如此占用大量内存?

我一点也不明白。这是预期的行为吗?粘贴独特吗?粘贴字符串和日期?还有吗?

0 个答案:

没有答案