【问题标题】:How do I mark duplicates in a new column [duplicate]如何在新列中标记重复项[重复项]
【发布时间】:2016-11-13 21:59:51
【问题描述】:

我想针对一列标记我的重复值

例如我有一个 df

X    Y    Z 
1    4    5
2    5    7
1    3    6
7    2    7

然后我想要一个新的数据框 df2 创建一个新的列 dup 来指示 X 是否重复

X    Y    Z   dup
1    4    5   TRUE
2    5    7   FALSE
1    3    6   TRUE
7    2    7   FALSE

谁能告诉我怎么做?

【问题讨论】:

  • 感谢 HubertL 收拾残局

标签: r


【解决方案1】:

您可以使用data.table 来做到这一点,按您的公共字段分组并检查每个组是否有不止一行:

library(data.table)
dt <- fread("X    Y    Z 
1    4    5
2    5    7
1    3    6
7    2    7")

dt[, dup := .N > 1, by = X]

   X Y Z   dup
1: 1 4 5  TRUE
2: 2 5 7 FALSE
3: 1 3 6  TRUE
4: 7 2 7 FALSE

【讨论】:

    【解决方案2】:

    这是一个使用ave()的方法:

    df$dup <- ave(df$X, df$X, FUN = length) > 1L;
    df;
    ##   X Y Z   dup
    ## 1 1 4 5  TRUE
    ## 2 2 5 7 FALSE
    ## 3 1 3 6  TRUE
    ## 4 7 2 7 FALSE
    

    【讨论】:

    • @ProcrastinatusMaximus 亲空白?
    • 它提高了 imo 的可读性 ;-)(这对答案很重要)
    • 谢谢,这很简单,而且很不稳定,而且很有效
    【解决方案3】:

    使用来自基础 R 的duplicated

    df2 <- df
    df2$dup <- c(duplicated(df2$X, fromLast = TRUE)  | duplicated(df2$X))
    

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2014-06-14
      • 2021-10-14
      • 2010-12-16
      • 2017-06-12
      相关资源
      最近更新 更多