R 为什么按组突变()要花很长时间?

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(日期)。我相信这会大大加

我有一个2.5Mx13的矩阵,我试图用一个ID变量来聚合它。起初我试着使用ddply,但我的记忆崩溃了。之后,我尝试使用data.table,它的工作速度要快得多:

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语法,这不太可能执行。