2011-10-12 63 views
3

我最近问了一个关于统计一个元素自身重复次数的问题(http://stackoverflow.com/questions/7669553/how-to-assign-在大数据框中重复数据块到基于数据帧的元素识别/ 7669607#7669607)。我收到了一些非常有用的建议,这些建议对少量行有效,但现在需要在更大的层面上执行操作(超过255k行,使用ddply形成大约100k个“组”):ddply用于拆分R中大量类别的问题

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 

尝试在较大的数据集上执行此操作会由于内存问题导致R窒息。有没有明显的解决办法?预先感谢(特别是耐心,因为我是一个新的“程序员”)。

回答

5

对于这样的真正的大问题,你可以尝试使用data.table真是让人不是plyr

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

data[,transform(.SD,time = NROW(.SD)), by = uid] 

假设time列不存在。

我仍然在学习data.table的过程,所以我这个鼓捣看来这可能是简单的(也许更快):

data[,rep(.N, .N),by = uid] 

.N似乎代表数量的内部变量每个子组的行数。

+1

我对这个正在运行的system.time()解决方案感兴趣。我也需要学习/使用data.table更多的工作,我怀疑它只为255k行提供任何好处,除非有一堆列... – nzcoops