【问题标题】:DPLYR distinct exclude column in compare but keep in results?比较中的 DPLYR 不同的排除列但保留结果?
【发布时间】:2020-01-26 01:55:43
【问题描述】:

我有一个类似于这个结构的data.frame:

a b c
1 1 A
1 1 A
1 1 BLAH
2 2 BLAH
2 3 C

df <- data.frame(a=c(1,1,1,2,2),b=c(1,1,1,2,3), c=c("A","A","BLAH","BLAH", "C"))

我只需要根据变量“a”和“b”对不同的数据进行子集化,但在结果中保留变量“c” - 但具有条件。如果有重复,只保留不等于“BLAH”值的版本。

输出应如下所示:

1 1 A
2 2 BLAH
2 3 C

所以我有一个不同的子集并选择丢弃“BLAH”版本?另外,请注意,我只保留了所需的“1 1 A”行之一。

【问题讨论】:

    标签: r dplyr distinct tidyverse


    【解决方案1】:
    df %>%
        group_by(a, b) %>%
        summarize(c = c[max(1, which(c != "BLAH"))][1]) %>%
        ungroup()
    ## A tibble: 3 x 3
    #      a     b c    
    #  <dbl> <dbl> <fct>
    #1     1     1 A    
    #2     2     2 BLAH 
    #3     2     3 C    
    

    【讨论】:

      【解决方案2】:

      如果我们需要保留'BLAH',一个选项是arrange'c' 列,这样'BLAH' 是最后一行,然后slice'c' 的第一个元素

      df %>%
        group_by(a, b) %>%
        arrange(a, b, c == "BLAH") %>%
        slice(1)
      # A tibble: 3 x 3
      # Groups:   a, b [3]
      #      a     b c    
      #  <dbl> <dbl> <fct>
      #1     1     1 A    
      #2     2     2 BLAH 
      #3     2     3 C    
      

      通过将 'c' 转换为 logicalorder 它,FALSE 将按字母顺序排列在 TRUE 之前

      【讨论】:

      • 如果没有基于其他行的重复行,我会保留带有“BLAH”的行。这会保留没有相应重复的“BLAH”行吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2018-07-31
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多