我在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???
我希望唯一(X [Y,])与X [Y,]相同,因为所有行都是唯一的,但事实并非如此。
答案 0 :(得分:5)
by
的{{1}}参数的默认值为unique.data.table
。因此,如果您对键控data.table执行key(x)
,它只会查看键列。要覆盖它,请执行以下操作:
unique(x)
默认情况下, unique(x, by = NULL)
会考虑所有列。或者,您也可以提供by = NULL
。