【问题标题】:R duplicated commandR重复的命令
【发布时间】:2018-04-03 14:52:47
【问题描述】:

我有一个数据集,我需要在其中根据多列中的数据查找重复项。下面是一个示例,数据类型为 int、date、int。

有点像

DF1 <- data.frame(ID=c('1','1','3','4','3' ),
        Date=c('01-04-2016','01-05-2016','01-04-2016','01-06-2016', '01-04-2016'),
        Sale=c('1000','1000','1000','2000', '1000'))

我知道我可以使用重复的命令根据以下 1 个变量查找受骗者

DF1$dupes <- duplicated(DF1$ID)

但是当我包含多个变量时,例如:

DF1$dupes <- duplicated(DF1, c("ID", "Date", "Sale"))

我得到两个错误

argument 'incomparables != FALSE' is not used (yet)

'fromLast' must be TRUE or FALSE

有人可以向我解释一下这些是什么意思吗?我在 ?duplicated 和许多在线网站上阅读了文档,其中大部分是帮助文档的副本。

无与伦比 -

  • 无法比较的值向量。 FALSE 是一个特殊的值, 意味着可以比较所有值,并且可能是唯一的值 接受除默认值以外的方法。会被强制 内部为与 x 相同的类型。

从上一个 -

  • 逻辑指示是否应从 反面,即相同元素的最后一个(或最右边) 将对应于重复 = FALSE。

两件事:

  1. 谁能解释为什么它不起作用?我不明白,理解会有所帮助。
  2. 还有其他方法可以识别它们吗?我不想删除它们,我想在数据框中标识它们,一个简单的 1/0 就可以了。

感谢您的帮助,谢谢。

【问题讨论】:

  • 我认为有一些错误您需要对数据集的列进行子集化,然后应用重复的duplicated(DF1[ c("ID", "Date", "Sale")])

标签: r duplicates


【解决方案1】:

错误的原因是 OP 使用“ID”、“Date”和“Sale”作为duplicated 的参数。根据?duplicated

duplicated(x, incomparables = FALSE,
       fromLast = FALSE, nmax = NA, ...)

这里,'x' 是向量或数据框或数组或 NULL。
第二个参数是incomparables,它假设c("ID", "Date", "Sale")是第二个参数,w


我们需要对数据集进行子集化并作为“x”的参数传递,并改为应用duplicated

duplicated(DF1[ c("ID", "Date", "Sale")])

【讨论】:

  • 语法很有帮助,谢谢。但我需要将其作为数据框中的变量,而不仅仅是在控制台中打印出来。当我运行 DF1$dupes
  • @Adam_S 您只需要分配&lt;-DF1$newvariable &lt;- duplicated(DF1[ c("ID", "Date", "Sale")]) duplicated 的输出是一个逻辑向量,除非您将对象分配给其他对象,否则它应该可以工作
  • 不确定我的问题,我只是再次运行它并且它工作。可能是我在这里问过的最重要的问题之一。非常感谢您的帮助。我真的很感激。
【解决方案2】:

如果您真的想仅根据 columns 中的 1 个来查找重复项:

DF1 <- data.frame(ID=c('1','1','3','4','3' ),
                    Date=c('01-04-2016','01-05-2016','01-04-2016','01-06-2016', '01-04-2016'),
                    Sale=c('1000','1000','1000','2000', '1000'))

findDupes <- function(theVector){
    dupes <- theVector[duplicated(theVector)];
    return (dupes);
}

dupesID <- findDupes(DF1$ID)

这会产生以下输出:

> dupesID
 [1] 1 3

【讨论】:

  • 可能有用,但我需要能够指定多个变量以用于查找重复项。
【解决方案3】:

您似乎没有将有效参数传递给函数:您将 c("ID", "Date", "Sale") 作为参数传递给“incomparables”(正如您在文档中看到的,incomparables 是重复函数的第二个参数)。

您到底想完成什么?标记在任何列中有重复的所有行?你可以使用

DF1$dupes <- apply(sapply(DF1, duplicated), MARGIN = 1, any)

或者,如果您只想在列的任何子集中表示重复,请使用

DF1$dupes <- apply(sapply(DF1[,c("ID", "Date")], duplicated), MARGIN = 1, any)

改为。

或者如果您想单独标记每列的重复项,请使用

DF1 <- cbind(DF1, sapply(DF1, duplicated))

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 2012-11-29
    • 2013-09-07
    • 1970-01-01
    • 2019-04-07
    • 2022-01-10
    • 2015-06-24
    相关资源
    最近更新 更多