所以我的实际数据集是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内存)杀死。
但是,如果我将数据集一分为二,粘贴列,然后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)
这很好。这些对象似乎适合存储在内存中,但在对它们进行操作时却不适合。但到底发生了什么,记忆如此密集?
我完全不明白。这是预期的行为吗?它是唯一可以粘贴的吗?用字符串和日期粘贴?还有别的吗?