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

时间:2011-10-12 02:55:27

标签: r transform plyr large-data

我最近问了一个关于计算元素重复次数的问题(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窒息。这有什么明显的解决方案吗?提前致谢(特别是耐心,因为我是一名新的“程序员”)。

2 个答案:

答案 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?发布了原始问题的新答案。

希望能在那里和这里帮助你。