【问题标题】:How to replace distinct values in a column if the value in another column is a duplicate in R? [duplicate]如果另一列中的值在 R 中重复,如何替换列中的不同值? [复制]
【发布时间】:2021-10-15 06:28:15
【问题描述】:

如果“ID”列中的值重复,我想用 NA 替换“Grade”列中的不同值。

这是我目前的数据框:

ID            Name            Grade
1001          Mary            10
1002          John            9
1002          John            10
1003          James           12

这就是我希望数据框的样子:

ID            Name            Grade
1001          Mary            10
1002          John            NA
1002          John            NA
1003          James           12

我将如何实现这一目标?

谢谢!

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    这里有几个基本 R 选项 -

    1. 使用duplicated
    df$Grade[duplicated(df$ID) | duplicated(df$ID, fromLast = TRUE)] <- NA
    df
    
    #    ID  Name Grade
    #1 1001  Mary    10
    #2 1002  John    NA
    #3 1002  John    NA
    #4 1003 James    12
    
    1. 使用table
    df$Grade[df$ID %in% names(Filter(function(x) x > 1, table(df$ID)))] <- NA
    

    您也可以将dplyr 用于 1。

    library(dplyr)
    
    df <- df %>% 
           mutate(Grade = replace(Grade, duplicated(ID) | 
                                  duplicated(ID, fromLast = TRUE), NA))
    df
    

    【讨论】:

    • 使用 dyplr 方法出现以下错误:Error: unexpected symbol in: "districtA &lt;- districtA %&gt;% mutate(gender = replace(gender, duplicated(Student Identifier"
    • 您似乎没有像我的回答那样正确复制代码。
    【解决方案2】:

    你可以试试

    library(dplyr)
    
    df %>%
      group_by(ID) %>%
      mutate(Grade = ifelse(n()>1, NA, Grade))
    
         ID Name  Grade
      <int> <chr> <int>
    1  1001 Mary     10
    2  1002 John     NA
    3  1002 John     NA
    4  1003 James    12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 2021-07-20
      • 2017-01-16
      • 1970-01-01
      • 2022-11-02
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多