从r中的数据帧中过滤重复项

时间:2016-11-04 19:52:12

标签: r duplicates dplyr unique

我有一个数据帧,每行一个观察,每个主题两个观察。我想过滤掉重复日期的行' day'数字。

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))

2 个答案:

答案 0 :(得分:4)

duplicated可以应用于整个数据集,只需使用base R方法就可以完成。

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

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

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

答案 1 :(得分:1)

单个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