2011-10-12 64 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