在合并两个数据集的过程中,我使用函数duplicated
检查数据是否有重复的条目。无论我在duplicated
之前还是之后运行setkey()
,我都会得到两个不同的输出。这是data.table
中的自然行为吗?在我的(谦逊)意见中,重复的数量应该通过设置密钥来保持不变,在我的理解中,密钥只是data.table
的重新排序和索引。我错过了一些关键点吗?
非常感谢!
以下是data.table
示例:
> DT
id x1 x2
1: A 0 1
2: A 1 1
3: B 0 1
4: B 1 0
5: C 1 1
6: C 0 0
在此未加密的数据集上运行duplicated
我得到的结果是没有重复的条目,这似乎是有序的。
duplicated(DT)
[1] FALSE FALSE FALSE FALSE FALSE FALSE
然后在用setkey()
设置密钥后,我得到以下输出,
setkey(DT,id)
duplicated(DT)
[1] FALSE TRUE FALSE TRUE FALSE TRUE
其中函数表示3个重复项。我只是不明白......
以下是我用于生成data.table
set.seed(123)
id <- rep(LETTERS[1:3],each=2)
x1 <- sample(c(0,1),6,T)
x2 <- sample(c(0,1),6,T)
DT <- data.table(id,x1,x2)
答案 0 :(得分:2)
要让duplicated
使用每列中的元素,在设置一个或多个键列后,在逐行重复检查中,使用
duplicated(DT,by=NULL)
> [1] FALSE FALSE FALSE FALSE FALSE FALSE
正如文档中duplicated
data.table
的行为与基本版本或处理data.frames
的行为不同。
当您使用setkey()
设置密钥时,函数duplicated
仅检查密钥列中的行以查找重复项。在问题中,只有id
被设置为关键,因此只检查id
的行(在本例中是列中的元素)是否重复。
如果在by
中指定duplicated
参数,该函数将检查by
中指定的每个列中的元素的行是否在表格下方有重复的行。< / p>
通过设置by=NULL
,可以考虑所有列,并且函数会检查行方式重复项,其中行向量包含来自所有列的元素。这样可以模拟处理{{1}时duplicated
的行为}}