代码之家  ›  专栏  ›  技术社区  ›  marcel

查找ID重复的行,在R中的另一列中保留一个值最高的行[重复]

  •  0
  • marcel  · 技术社区  · 2 年前

    我有列为“ID”和“value”的数据,其中ID可能会重复。我想找到所有具有重复ID的行,只保留值较高的行。

    mydf <- data.frame(ID = c(1,2,2,3,4), value = c(5, 8, 20, 18,15))
    

    我和dplyr一起工作。到目前为止,我能找到重复的

    find_dup <- function(dataset, var) {
      dataset %>% group_by({{var}}) %>% filter(n() >1) %>% ungroup %>% arrange({{var}})
    }
    find_dup(mydf, ID)
    

    但我在替换步骤中遇到了麻烦,不知道如何“指向”更大的值。如果可能的话,希望暂时使用一个有趣的解决方案。欢迎有任何想法,谢谢!

    1 回复  |  直到 2 年前
        1
  •  0
  •   Allan Cameron    2 年前

    您可以 group_by ID和 slice_max 每组中的最高值。

    library(dplyr)
    
    mydf <- data.frame(ID = c(1, 2, 2, 3, 4), value = c(5, 8, 20, 18, 15))
    
    mydf %>% 
      group_by(ID) %>% 
      slice_max(value, n = 1) %>%
      ungroup()
    #> # A tibble: 4 x 2
    #>      ID value
    #>   <dbl> <dbl>
    #> 1     1     5
    #> 2     2    20
    #> 3     3    18
    #> 4     4    15
    

    创建于2023-08-07 reprex v2.0.2