R:在data.table中的setkey()之后输出重复的更改

时间:2015-03-24 21:02:09

标签: r data.table

在合并两个数据集的过程中,我使用函数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)

1 个答案:

答案 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的行为}}