【问题标题】:Using `duplicated` function to identify duplicated rows in a `data.table` with key使用 `duplicated` 函数通过键识别 `data.table` 中的重复行
【发布时间】:2014-03-13 05:10:59
【问题描述】:

我正在尝试确定 data.table 中重复的行。这是我使用的示例代码。

a<-c(1,2,3,3,5)
b<-c(6,7,8,9,10)
require(data.table)
DT<-data.table(a,b)
setkey(DT,a)
DT
#   a  b
# 1: 1  6
# 2: 2  7
# 3: 3  8
# 4: 3  9
# 5: 5 10
setkey(DT,a)
duplicated(DT)
# [1] FALSE FALSE FALSE  TRUE FALSE

如您所见,我将第 4 行标识为重复行,这是不正确的,因为 DT[3:4,"b",with=FALSE] 不同。我是不是用duplicated函数错了?

【问题讨论】:

  • 也可以看看?duplicated.data.table。
  • @Arun 我检查了它,但对参数 by 的定义感到困惑,其中指出:“NULL 或 FALSE 值使用所有列,并且类似于类似的 data.frame 方法。”跨度>
  • 是的,您对此有何困惑?特别是当前面的行声明“默认为key(x),默认情况下仅使用 key 列”。
  • 啊哈,没错!刚刚也查了。会解决的。一定是 1.8.10 的回归。谢谢。
  • 提交bug #5424 并修复。 by=TRUE/FALSE 两者都会导致错误。使用by=NULL。 ?duplicated.data.table 也已更新。在 1.9.4 中会很好。

标签: r data.table


【解决方案1】:

duplicated.datatable 有一个 by 参数,默认为键列

因此,如果您将其设置为考虑所有列,它将按照您的意愿执行

duplicated(DT, by = names(DT))
# [1] FALSE FALSE FALSE FALSE FALSE

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 2019-09-09
    • 2016-07-06
    • 2012-11-15
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多