2017-04-11 66 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