我目前使用summaryBy
包中的doBy
命令按特定函数对数据帧的行进行分组。这很好用。但是:
doBy
包加载速度非常慢,我认为因为它导入了各种其他包。加载doBy
需要大约3秒钟。我只需要此软件包中的简单summaryBy
功能。
是否有可能加快软件包的加载时间,或者是否有其他实现方法无法加载这么大的软件包?
答案 0 :(得分: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]
库加载速度很快,只需要1行代码(如果算上将data.frame
转换为data.table
,则需要2行),而且速度非常快。你还想要什么?
答案 1 :(得分:6)
只需将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)
答案 2 :(得分:3)
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:行(可选择更改包:在描述中划分一些其他名称),然后重新构建并安装新的精简包。 (另一种可能性是将所有文件保留在包中,只删除STRpe文件中的Depends:和Imports:行,但加载速度不如删除几乎所有文件的速度快。)