unique 无法与 data.table 一起正常工作

unique working incorrectly with data.table

我在 data.table 中发现了一些有趣的行为,我很好奇是否有人可以向我解释为什么会这样。我正在合并两个 data.tables(在这个 MWE 中,一个有 1 行,另一个有 2 行)。合并的 data.table 有两个唯一行,但是当我在合并的 data.table 上调用 unique() 时,我得到一个只有一行的 data.table。难道我做错了什么?或者这是一个错误?

这是一个 MWE:

library(data.table)
X = data.table(keyCol = 1)
setkey(X, keyCol)
Y = data.table(keyCol = 1, otherKey = 1:2)
setkeyv(Y, c("keyCol", "otherKey"))
X[Y, ] # 2 unique rows
unique(X[Y, ]) # Only 1 row???

我希望 unique(X[Y, ]) 与 X[Y, ] 相同,因为所有行都是唯一的,但事实并非如此。

unique.data.tableby 参数的默认值为 key(x)。因此,如果您在键控 data.table 上执行 unique(x),它只会查看键列。要覆盖它,请执行:

unique(x, by = NULL)

by = NULL 默认情况下考虑所有列。或者,您也可以提供 by = names(x).