我最近问了一个关于计算元素重复次数的问题(http://stackoverflow.com/questions/7669553/how-to-assign-number-of-repeats-to-dataframe-based-大型数据框中的识别元素/ 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
尝试在较大的数据集上执行此操作会导致由于内存问题导致的R窒息。这有什么明显的解决方案吗?提前致谢(特别是耐心,因为我是一名新的“程序员”)。
答案 0 :(得分: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 :(得分:1)
我在How to assign number of repeats to dataframe based on elements of an identifying vector in R?发布了原始问题的新答案。
希望能在那里和这里帮助你。