[英]Faster alternative to doBy/summaryBy
我目前使用doBy
包中的summaryBy
命令按特定函数对数据帧的行进行分组。 这很好用。 但:
doBy
包加载速度非常慢,我认为因为它导入了各种其他包。 加载doBy
大约需要3秒钟。 我只需要这个包中的简单summaryBy
功能。
是否有可能加快封装的加载时间,还是有一种替代的实现方式不能加载如此庞大的封装?
为了聚合具有复杂功能的大型数据集,很难击败data.table包。 例如,以下是如何汇总虹膜数据集的Sepal.Length
mean
和sd
:
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.R
和orderBy.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.