ddply在R中拆分大量类别的问题

SMM*_*SMM 3 r transform large-data plyr

最近,我问一个关于计数的时间元素进行了反复数本身的问题(http://stackoverflow.com/questions/7669553/how-to-assign-number-of-repeats-to-dataframe-based-on-elements -of-an-identification/7669607#7669607)在一个大型数据框架中.我收到了一些非常有用的建议,这些建议适用于少量行,但现在需要在更大的级别上执行操作(超过255k行,使用ddply形成大约100k"组"):

system.time( data <- ddply(data, "uid", function(x) {x$time <- 1:nrow(x); x}) ) #uid is the grouping variable, for which I need to count the number of repeats for output like

uid    time
ny1    1
ny1    2
ny2    1
ny2    2
ny2    3
Run Code Online (Sandbox Code Playgroud)

尝试在较大的数据集上执行此操作会导致由于内存问题导致的R窒息.这有什么明显的解决方案吗?在此先感谢(特别是耐心,因为我是一个新的"程序员").

jor*_*ran 5

对于像这样的真正大的问题,你可以尝试使用data.tables而不是plyr:

library(data.table)
data <- data.table(data)

data[,transform(.SD,time = NROW(.SD)), by = uid]
Run Code Online (Sandbox Code Playgroud)

假设该time列尚不存在.

我还在学习中data.table,所以当我修补它时,看起来这可能更简单(也许更快):

data[,rep(.N, .N),by = uid]
Run Code Online (Sandbox Code Playgroud)

.N 似乎是一个内部变量,表示每个子组的行数.