所以我的实际数据集是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)
很好。这些对象似乎适合存储在内存中,但是当您对其进行操作时则不适合。但是正在发生的事情如此占用大量内存?
我一点也不明白。这是预期的行为吗?粘贴独特吗?粘贴字符串和日期?还有吗?