更快的替代doBy/summaryBy

the*_*ega 3 r dataframe

我目前使用包中的summaryBy命令doBy按特定函数对数据帧的行进行分组.这很好用.但:

doBy包加载速度非常慢,我想是因为它导入其他包.doBy加载大约需要3秒钟.我只需要summaryBy这个包中的简单功能.

是否有可能加快封装的加载时间,还是有一种替代的实现方式不能加载如此庞大的封装?

Zac*_*ach 15

为了聚合具有复杂功能的大型数据集,很难击败data.table包.例如,这里是你如何总结meansdSepal.Length对虹膜数据集:

require(data.table)
dat <- data.table(iris)
dat[,list(mean=mean(Sepal.Length), sd=sd(Sepal.Length)),by=Species]
Run Code Online (Sandbox Code Playgroud)

该库加载速度很快,只需要1行代码(如果你计算转换data.frame为a data.table,则为2行),而且速度非常快.你还能想要什么?


42-*_*42- 6

只需使用lapply(split(.))具有所需功能的base-R 范例,您就可以获得更快的性能.

 dat <- structure(list(category = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("A", 
"B", "C"), class = "factor"), year = c(2000, 2001, 2004, 2005, 
2009, 2010, 2000, 2001, 2004, 2005, 2009, 2010, 2000, 2001, 2004, 
2005, 2009, 2010), incidents = c(7, 4, 4, 2, 3, 1, 6, 3, 5, 2, 
2, 5, 2, 1, 4, 4, 2, 1)), .Names = c("category", "year", "incidents"
), row.names = c(NA, -18L), class = "data.frame")

split(dat, dat$category)
lapply( split(dat[-1], dat$category), summary)
Run Code Online (Sandbox Code Playgroud)