2016-08-18 58 views
1

我有一列,并在该列中,我有大约5-10个实例每个数十万个不同的字符串。我想统计他们,然后把计数放入相应的行中。所以我这样做:ddply内存要求,解决方案

newdf <- ddply(oldDF, ~BigVariable, transform, counts = length(BigVariable)) 

这工作正常,直到我开始接近100万行/ 1GB文件大小。 每次使用此大小或更大的数据集时,我的R会话都会发生致命错误。然而,28GB的空闲内存,我不明白为什么这应该是一个问题,但我从this thread的理解是,ddply有时可以是一个记忆猪。

虽然我很确定这是一个内存问题,因为在我的系统监视器发生崩溃之前,我看到修改过的内存和正在使用的内存与空闲内存之间的争斗,直到绿色条成功并取最后一位, R在同一时刻崩溃。

  • 我已经做了显而易见的和使用data.table更有效的内存使用。
  • 在一个变量中有大量的因素。我试图将冒犯变量改为角色,希望它能更好地使用data.table,但没有骰子。

我还应该尝试什么?是否有更高效的内存方法来获取这些计数并将其放入所有适当的行中?

回答

2

dplyrddply的更好替代方案,因为它可以更高效。

library(dplyr) 
oldDF %>% 
    group_by(BigVariable) %>% 
    mutate(counts = n()) 

或用data.table

library(data.table) 
setDT(oldDF)[, counts := .N, by = BigVariable] 
+0

第一个解决方案没有崩溃完成,但给了我一个NULL。第二个似乎运作良好。现在,看看我可以推送这个数据集有多大。谢谢! – Thoughtcraft

+1

@JamesHanks NULL输出令人困惑。你有没有尝试过一个新的会议。 – akrun

+1

现在他们都工作。谢谢! – Thoughtcraft