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窒息.这有什么明显的解决方案吗?在此先感谢(特别是耐心,因为我是一个新的"程序员").
对于像这样的真正大的问题,你可以尝试使用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 似乎是一个内部变量,表示每个子组的行数.
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |