【问题标题】:data.table - merge - duplicates despite all.x = TRUE in Rdata.table - 合并 - 尽管 all.x = TRUE 在 R 中重复
【发布时间】:2020-04-14 22:12:09
【问题描述】:

如果我错了,请纠正我,但我认为通过使用all.x = TRUE,无法获得比x 中存在的mote 行。我做了一个非常简单的合并command:

basis <<- merge(client[, c("clientID")],
                          claimsClientTotal[, c("clientID")],
                          by = "clientID", all.x = TRUE)

但是,合并 data.table 中的行数比 x 中的行多 - 这里是 client。 另外,重复次数只有43

> nrow(client)
[1] 194671
> anyDuplicated(client)
[1] 0
> 
> basis <- merge(client[, c("clientID")],
+                           claimsClientTotal[, c("clientID")],
+                           by = "clientID", all.x = TRUE)
> nrow(basis)
[1] 216764
> anyDuplicated(basis)
[1] 43

使用all.x = TRUE时,合并后的data.table上的行数怎么可能比原来的多?

另外,为什么只有43个重复,但行的差异超过43个?

我错过了什么吗?

【问题讨论】:

  • 但是为什么“anyDuplicated”不匹配差异?

标签: r duplicates data.table


【解决方案1】:

这里,anyDuplicated 返回第一个副本的索引位置

v2 <- c(1:100, 100)
anyDuplicated(v2)
#[1] 101

这只是一种检查向量或data.frame/matrix是否有重复项的方法

如果我们需要获取重复的数量

sum(duplicated(v2))
#[1] 1

如果我们只需要获取重复的行

basis[duplicated(basis),]

或返回所有重复项

basis[duplicated(basis)|duplicated(basis, fromLast = TRUE),]

【讨论】:

  • 如何打印所有的副本?
  • 虽然,我仍然不确定重复项是如何到达那里的?
  • @Danka 您正在通过“clientID”进行合并。如果这在两个数据集中都不是唯一的,则可能导致重复
  • @Danka 你能查一下table(client$clientID)table( claimsClientTotal$clientID)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2020-06-21
  • 2021-09-01
  • 1970-01-01
相关资源
最近更新 更多