R数据表聚合数据

4

我曾经使用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)],但其他列没有被删除。


4
我认为您正在寻找的是:data[, list(metric=sum(metric)), by=list(a,b)],意思是按ab两列分组,并计算metric列的总和。 - Arun
1个回答

6
您可以筛选结果:
data[, total:=sum(metric), by=list(a,b)][, c('a','b','metric')]

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接