为什么聚合后会出现重复的 data.table 行?

Why do I get duplicated data.table rows after aggregation?

我按列聚合了一个data.table,并将其设置为键,然后惊讶地发现table仍然包含重复的行。 这是什么原因?

我的 table 很特别,因为我有两列具有完全相同的值(但出于实际原因必须保留这两列),并且我通过其中一列汇总了 table。

一个简单的例子:

> library(data.table)
> dat = data.table(
+   class1 = c('a', 'a', 'b'), 
+   class2 = c('a', 'a', 'b'), 
+   value = 1:3)
> aggr = dat[, list(class2, sum(value)), keyby = class1]
> stopifnot(!any(duplicated(aggr)))
Error: !any(duplicated(aggr)) is not TRUE

如果您对所有列使用聚合函数,那么您会得到预期的结果,没有重复的行:

> library(data.table)
> dat = data.table(
+   class1 = c('a', 'a', 'b'), 
+   class2 = c('a', 'a', 'b'), 
+   value = 1:3)
> aggr = dat[, list(class2[[1]], sum(value)), keyby = class1]
> stopifnot(!any(duplicated(aggr)))

请注意,不同之处在于我采用了 class2 列的第一个元素。请注意,输出一个值的任何其他函数也适用。