【发布时间】:2015-02-25 13:02:19
【问题描述】:
我在 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, ] 相同,因为所有行都是唯一的,但事实并非如此。
【问题讨论】:
-
检查
attr(X[Y], "sorted")。它由keyCol键入,所以这是unique使用的。然后尝试Y[X],然后检查attr(Y[X], "sorted"),你会弄明白的。 -
所以如果两行有不同的值但相同的键,那么其中一个会被data.table:::unique.data.table 删除?
-
我不确定你的意思,但实际上你应该只用
key(X[Y])和key(Y[X])检查密钥 -
@DavidArenburg 我还是有点困惑...... Y[X, ] 与这个问题有什么关系?我知道 Y 的键比 X 多,但我不明白为什么 unique(X[Y, ]) 会“重复”具有相同键但具有不同值的两行。
-
阅读
?unique,尤其是by参数。
标签: r unique data.table