繁体   English   中英

更快的替代doBy / summaryBy

[英]Faster alternative to doBy/summaryBy

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

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

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

为了聚合具有复杂功能的大型数据集,很难击败data.table包。 例如,以下是如何汇总虹膜数据集的Sepal.Length meansd

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

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

只需使用base-R lapply(split(.))范例和你想要的函数,你就可以获得更快的性能。

 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)

1)尝试从doBy源包中获取summaryBy.RorderBy.R ,而不是安装doBy包:

setwd("doBy/R")
source("summaryBy.R")
source("orderBy.R")

summaryBy(...whatever...)

要么

2)删除包中除DESCRIPTION文件,R目录和那两个源文件(删除所有其他.R文件)之外的所有文件,从DESCRIPTION文件中删除Depends:和Imports:行(可选择更改Package:line in描述一些其他名称)然后重建并安装新的精简包。 (另一种可能性是将所有文件保留在包中,只删除STRpe文件中的Depends:和Imports:行,但不会像删除几乎所有内容那样快速加载)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM