【问题标题】:filter duplicates from a data frame in r [duplicate]从r中的数据框中过滤重复项[重复]
【发布时间】:2017-03-18 18:20:33
【问题描述】:

我有一个数据框,每行一个观察值,每个主题两个观察值。我想只过滤掉具有重复“天”数字的行。

ex <- data.frame('id'= rep(1:5,2), 'day'= c(1:5, 1:3,5:6))    

以下代码仅过滤掉第二个重复的行,而不是第一行。同样,我想过滤掉两个重复的行。

ex %>% 
    group_by(id) %>% 
    filter(duplicated(day))

以下代码有效,但看起来很笨重。有没有人有更有效的解决方案?

ex %>% 
    group_by(id) %>% 
    filter(duplicated(day, fromLast = TRUE) | duplicated(day, fromLast = FALSE))

【问题讨论】:

    标签: r duplicates dplyr unique


    【解决方案1】:

    duplicated 可以应用于整个数据集,这可以通过 base R 方法完成。

    ex[duplicated(ex)|duplicated(ex, fromLast = TRUE),]
    

    使用dplyr,只有当行数(n())大于1时,我们才能group_by列和filter

    ex %>% 
         group_by(id, day) %>%
         filter(n()>1)
    

    【讨论】:

      【解决方案2】:

      单个 tidyverse 管道:

      exSinglesOnly <- 
          ex %>% 
          group_by(id,day) %>% # the complete group of interest
          mutate(duplicate = n()) %>% # count number in each group
          filter(duplicate == 1) %>% # select only unique records
          select(-duplicate) # remove group count column
      
      > exSinglesOnly
      Source: local data frame [4 x 2]
      Groups: id, day [4]
      
           id   day
        <int> <int>
      1     4     4
      2     5     5
      3     4     5
      4     5     6
      

      【讨论】:

      • 哦,我还没有看到@Akrun 的第二个答案。这是当时的副本,但我将保留它以帮助解释完整分组和后续过滤所涉及的逻辑。
      猜你喜欢
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2020-09-15
      • 2020-12-22
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多