R 为什么按组突变()要花很长时间?
我有一个2.5Mx13的矩阵,我试图用一个ID变量来聚合它。起初我试着使用ddply,但我的记忆崩溃了。之后,我尝试使用data.table,它的工作速度要快得多:R 为什么按组突变()要花很长时间?,r,aggregate,data.table,R,Aggregate,Data.table,我有一个2.5Mx13的矩阵,我试图用一个ID变量来聚合它。起初我试着使用ddply,但我的记忆崩溃了。之后,我尝试使用data.table,它的工作速度要快得多: data <- as.data.table(data) key(data) <- "ID" agg<-mydata[,mutate(.SD, start = min(Date)) , by = ID] 数据您不需要变异,只需使用开始:=min(日期)。我相信这会大大加
data <- as.data.table(data)
key(data) <- "ID"
agg<-mydata[,mutate(.SD,
start = min(Date))
, by = ID]
数据您不需要变异
,只需使用开始:=min(日期)
。我相信这会大大加快速度
agg <- mydata[, start := min(Date), by = ID]
agg@konvas比我快,但你应该能够验证:=
更快:
##
library(data.table)
library(plyr)
library(microbenchmark)
##
t0 <- as.Date("2013-01-01")
Df <- data.frame(
ID=sample(LETTERS,500000,replace=TRUE),
Date=t0+sample((-100):100,500000,replace=TRUE),
stringsAsFactors=FALSE)
Dt1 <- data.table(Df)
setkeyv(Dt1,cols="ID")
Dt2 <- copy(Dt1)
##
f1 <- function(){
Agg <- Dt1[
,
mutate(.SD,start = min(Date)),
by = list(ID)]
}
f2 <- function(){
Agg <- Dt2[
,
"Start":=min(Date),
by=list(ID)]
}
##
Res <- microbenchmark(
f1(),f2()
)
##
Unit: milliseconds
expr min lq median uq max neval
f1() 25.08676 27.30188 28.22867 31.60754 63.97749 100
f2() 10.48293 11.39930 13.25193 14.26284 47.80564 100
##
库(数据表)
图书馆(plyr)
图书馆(微基准)
##
t0如果您还没有看到它们,请尝试浏览data.table主页上的演示文稿。没有其他人提到过这一点,因此要清楚:您使用的是部分dplyr和部分data.table语法,这不太可能执行。