R data.table聚合数据

时间:2014-08-08 20:35:36

标签: r data.table

我曾经使用aggregate进行数据汇总,如何在data.table中做类似的事情?

假设我生成如下数据:

data <- data.table("a"=sample(1:100, 100),
                   "b"=sample(1:100, 100),
                   "c"=sample(1:100, 100),
                   "d"=sample(1:100, 100),
                   "metric"=rnorm(100))

我曾经这样做过:aggregate(metric~a+b, data=data, sum)。在data.table中执行此操作的等效方法是什么?我尝试了data[, total:=sum(metric), by=list(a,b)],但其他列未被删除。

1 个答案:

答案 0 :(得分:6)

您可以过滤结果:

data[, total:=sum(metric), by=list(a,b)][, c('a','b','metric'), with=FALSE]

获得相同结果的另一种方法(我认为它更快)是使用dcast

reshape2::dcast(data,a+b~.,fun=sum,value.var="metric")