2017-04-11 64 views
1

快捷的方式我有非常大的數據集類似以下內容:計算平均值,其具有大數據集

myd <- data.frame (id = paste("id_",rep(1:500000, each = 3), sep=""), 
     yvar= rep(1:500000, each= 3), xvar= rep(1:500000, each= 3)) 

我想計算意味着IDS。我正在嘗試以下它正在採取長時間

myd1 <- aggregate(myd, list(myd$id), mean) 

任何更快的做到這一點?

+0

你閱讀以下的答案嗎?在我的計算機上,這比你的(有一個錯字)快了將近百倍。我想你的應該是'聚合(myd [,-1],列表(myd $ id),意思)' – Frank

+0

謝謝你仔細閱讀這個問題並回答它。 – jon

+0

有關全面的速度比較,請參閱Ari Friedman對上面鏈接的「每組平均數據」問題的回答。 – Frank

回答

3

隨着data.table

library(data.table) 
setDT(myd) 
myd[,.(mean(yvar),mean(xvar)),by=(id)] 

性能對比如下:

system.time(myd1 <-aggregate(myd[, -1], list(myd$id), mean)) 
user system elapsed 
19.56 0.08 19.72 

system.time(mydt1<-mydt[,.(mean(yvar),mean(xvar)),by=(id)]) 
user system elapsed 
0.07 0.00 0.06