我目前使用包中的summaryBy命令doBy按特定函数对数据帧的行进行分组.这很好用.但:
该doBy包加载速度非常慢,我想是因为它导入其他包.doBy加载大约需要3秒钟.我只需要summaryBy这个包中的简单功能.
是否有可能加快封装的加载时间,还是有一种替代的实现方式不能加载如此庞大的封装?
Zac*_*ach 15
为了聚合具有复杂功能的大型数据集,很难击败data.table包.例如,这里是你如何总结mean和sd的Sepal.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行),而且速度非常快.你还能想要什么?
只需使用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)