首页 > 解决方案 > R使用带有多列数字和字符串数据的duplicated()来标识不删除

问题描述

我找不到这样做的好方法,它可能很简单。

我想在 duplicated() 函数的第一部分中包含多个变量/列,也就是跨多个列的 ID 重复。

示例数据是:

eg_data <- data.frame(
ID = c(1,1,1,2,2,3,3,4,4), 
place =c('blue','green','blue',
'pink','pink','black','brown','green','blue')) 

我想用 TRUE/FALSE 或 1/0 来识别受骗者。在示例数据中,应为组合 ID=1 / place = blue 和 ID=2 / place = pink 生成欺骗标志。

我已经尝试过以下类似的方法,但它们不起作用。

eg_data$dupes <- duplicated(eg_data$ID, eg_data$place)
eg_data$dupes <- duplicated(eg_data$ID & eg_data$place)
eg_data$dupes <- duplicated(eg_data$ID + eg_data$place)
eg_data$dupes <- duplicated((eg_data$ID, eg_data$place), incomparables = 
FALSE)

我不想将它们选择到新的 df 中,将它们从现有的 DF 中删除,我只想创建一个作为重复结果的列。我已经查看了 distinct()、unique(),但它们并没有满足我的需求,而且我无法重复使用多个变量或数字和字符数据的组合。

对不起,如果这是一些 101 的东西,但我找不到简单的方法。我很确定正则表达式可以做到这一点,但我不熟悉正则表达式,并且更喜欢来自 base 或 dplyr 或类似 IE 的东西,我不只是复制 + 粘贴一行我不理解且无法复制自己的代码.

谢谢!

标签: rstringduplicates

解决方案


如果要检查多个列,则必须传递整个数据框。因此,例如,duplicated(eg_data)将检查所有列并返回TRUE整行是否与另一行相同。如果要检查列的子集,则需要对数据框进行子集化;类似的东西duplicated(eg_data[, c('var1', 'var2', 'var4')])。这是输出:

> duplicated(eg_data)
[1] FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE

推荐阅读