參考
https://stackoverflow.com/questions/12478943/how-to-group-data-table-by-multiple-columns
實(shí)際工作中,我們需要對(duì)數(shù)據(jù)進(jìn)行平均值計(jì)算训枢,這里我比較了aggregate
和data.table
的方法,測(cè)試主要包括:
1,對(duì)數(shù)據(jù)yield計(jì)算平均值
2,計(jì)算N不同水平的平均值
3虱疏, 計(jì)算N和P不同水平的平均值
1. 常規(guī)方法aggregate
代碼:
data(npk)head(npk)aggregate(yield~N,data=npk,FUN = mean)aggregate(yield~N+P,data=npk,FUN = mean)
結(jié)果
> aggregate(yield~N,data=npk,FUN = mean) N yield1 0 52.066672 1 57.68333> aggregate(yield~N+P,data=npk,FUN = mean) N P yield1 0 0 51.716672 1 0 59.216673 0 1 52.416674 1 1 56.15000
2. 使用data.table方法
代碼:
data(npk)head(npk)library(data.table)setDT(npk)# 單個(gè)變量npk[,mean(yield),by=N]# 兩個(gè)變量npk[,mean(yield),by=c("N","P")]# 兩個(gè)變量的另一種寫(xiě)法npk[,mean(yield),by=list(N,P)]npk[,mean(yield),by=.(N,P)]
結(jié)果:
> # 單個(gè)變量> npk[,mean(yield),by=N] N V11: 0 52.066672: 1 57.68333> > # 兩個(gè)變量> npk[,mean(yield),by=c("N","P")] N P V11: 0 1 52.416672: 1 1 56.150003: 0 0 51.716674: 1 0 59.21667> > > # 兩個(gè)變量的另一種寫(xiě)法> npk[,mean(yield),by=list(N,P)] N P V11: 0 1 52.416672: 1 1 56.150003: 0 0 51.716674: 1 0 59.21667> npk[,mean(yield),by=.(N,P)] N P V11: 0 1 52.416672: 1 1 56.150003: 0 0 51.716674: 1 0 59.21667
要點(diǎn):
data.table速度更快呀打,語(yǔ)法更簡(jiǎn)單肪虎。
?