data.table, . :
indexVars = paste0('f', 1:4, sep = '')
dtDup <- as.data.table(dfDup)
dtDupAgg = dtDup[, list(data = sum(data)), by = c(indexVars)]
data.table 1.9.2+ setDT, data.frames data.tables ( , , , , .).
, :
dtDup <- as.data.table(dfDup)
dtDup[...]
:
## data.table v1.9.2+
setDT(dfDup) ## faster than as.data.table(.)
dfDup[...] ## dfDup is now a data.table, converted by reference
plyr . plyr ? ( ) .
, dplyr, , plyr, , data.table, IMHO. dplyr:
dfDup %.% group_by(f1, f2, f3, f4) %.% summarise(data = sum(data))
data.table dplyr ( ):
#
system.time(ans1 <- dtDup[, list(data=sum(data)), by=c(indexVars)])
# user system elapsed
# 0.049 0.009 0.057
#
system.time(ans2 <- dfDup %.% group_by(f1, f2, f3, f4) %.% summarise(data = sum(data)))
# user system elapsed
# 0.374 0.013 0.389
plyr ( 93 ). , dplyr , plyr, ~ 7x , data.table .
, :
all.equal(as.data.frame(ans1[order(f1,f2,f3,f4)]),
as.data.frame(ans2))
# [1] TRUE