【问题标题】:Looking to remove both rows if duplicated in a column using dplyr [duplicate]如果使用 dplyr 在列中重复,则希望删除两行 [重复]
【发布时间】:2019-10-29 08:59:05
【问题描述】:

我正在尝试在“id”列中创建一个没有重复值行的新数据框

我尝试了一些选项,但我想保持一致并利用dplyr。我尝试使用 distinct() 函数但无济于事。

library(tidyverse)

df <- structure(list(id = c("1-2", "1-3", "1-3", "1-4", 
"1-5", "1-7", "1-7", "1-7", "1-9", 
"1-22"), award_amount = c(3000, 596500, 1125000, 5881515, 
155555, 686500, 207718, 250000, 750000, 3500000)), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

s4 <- df  %>% 
  distinct(id, .keep_all = TRUE) 
s4 

我希望“id”列中包含重复项的两行都不存在于最终表格中

【问题讨论】:

    标签: r dplyr duplicates


    【解决方案1】:

    这是使用dplyr 的一种方式-

    df %>% 
      group_by(id) %>% 
      filter(n() == 1) %>% 
      ungroup()
    
    # A tibble: 5 x 2
      id    award_amount
      <chr>        <dbl>
    1 1-2           3000
    2 1-4        5881515
    3 1-5         155555
    4 1-9         750000
    5 1-22       3500000
    

    【讨论】:

      【解决方案2】:

      我们也可以使用(ungroup根据需要):

      df %>% 
        group_by(id) %>% 
        filter(!anyDuplicated(id))
       Groups:   id [5]
        id    award_amount
        <chr>        <dbl>
      1 1-2           3000
      2 1-4        5881515
      3 1-5         155555
      4 1-9         750000
      5 1-22       3500000
      

      【讨论】:

        【解决方案3】:

        这是一种稍微不同的方式,无需使用 duplicated 进行分组。检查向量两端的重复项意味着所有重复项都标记为TRUE。我们可以否定结果,然后filter 到所需的行。

        library(tidyverse)
        df <- structure(list(id = c("1-2", "1-3", "1-3", "1-4", "1-5", "1-7", "1-7", "1-7", "1-9", "1-22"), award_amount = c(3000, 596500, 1125000, 5881515, 155555, 686500, 207718, 250000, 750000, 3500000)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))
        df %>%
          filter(!(duplicated(id) | duplicated(id, fromLast = TRUE)))
        #> # A tibble: 5 x 2
        #>   id    award_amount
        #>   <chr>        <dbl>
        #> 1 1-2           3000
        #> 2 1-4        5881515
        #> 3 1-5         155555
        #> 4 1-9         750000
        #> 5 1-22       3500000
        

        reprex package (v0.3.0) 于 2019-06-14 创建

        【讨论】:

          猜你喜欢
          • 2023-03-09
          • 1970-01-01
          • 2018-04-07
          • 2014-05-22
          • 2018-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-04
          相关资源
          最近更新 更多