【问题标题】:Removing duplicates using two columns and a condition on a third column使用两列和第三列上的条件删除重复项
【发布时间】:2021-01-04 16:49:31
【问题描述】:

我有以下数据集

   A       B         C 
   1      red        No
   2      green      Yes
   1      red        No
   3      red        No
   2      green      No
   1      red        Yes
   4      red        Yes
   2      green      No
   5      green      No

因此,我想删除基于 A 列和 B 列的重复行,但保留 C 列上值为“是”的行。期望的结果是:

   A       B         C 
   1      red        Yes
   2      green      Yes
   3      red        No
   4      red        Yes
   5      green       No

我正在 dplyr 中寻找答案。 谢谢大家!

【问题讨论】:

    标签: r dplyr duplicates data-cleaning


    【解决方案1】:

    你可以这样做:

    df %>% 
      group_by(A, B) %>% 
      mutate(C = rev(sort(C))) %>% 
      summarise(C = C[1], .groups = "keep")
    
    #> # A tibble: 5 x 3
    #> # Groups:   A, B [5]
    #>       A B     C    
    #>   <int> <chr> <chr>
    #> 1     1 red   Yes  
    #> 2     2 green Yes  
    #> 3     3 red   No   
    #> 4     4 red   Yes  
    #> 5     5 green No   
    

    【讨论】:

    • 谢谢!艾伦!我编辑了我写的东西。您现在可以验证您的代码吗?
    • @Alex 是的,这个具有相同代码的输入现在匹配您想要的输出
    • 谢谢!有效。那么,在这种情况下 (C = rev(sort(C))) 做了什么?
    • @Alex 你得到每个唯一的组,然后按字母倒序对它们进行排序,以便“是”在每个组中排在第一位(如果有的话)。然后,您只需从每个组中取出第一个。
    • 谢谢!所以,如果是 (1,0) 而不是 (Yes,No) 我应该使用 arrange 而不是 sort
    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2019-02-19
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多