【发布时间】:2018-06-19 13:55:09
【问题描述】:
所以我的实际数据集是 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 的 RAM 变为近 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)
这很好。对象似乎适合内存,但在您对它们进行操作时却不适合。但是发生了这么大的内存占用?
我完全不明白。这是预期的行为吗?粘贴是独一无二的吗?粘贴字符串和日期?还有什么?
【问题讨论】:
-
粘贴分配两次,因此对于较长的输入来说很昂贵