仅过滤使用dplyr复制的行

时间:2019-02-20 18:42:33

标签: r dplyr

我一直在努力解决this issue中提出的问题,但没有成功。这不仅包括过滤在组中重复的项目,而且还考虑了与 dplyr 我更喜欢dplyr而不是base或data.table )进行比较的原始项目。

我尝试的解决方案如下:

> a <- data.frame(name=c("a","b","b","b","a","a"),position=c(1,2,1,2,2,2),achieved=c(1,0,0,0,1,0))
> a %>% group_by(name,achieved) %>% mutate(duplicated=duplicated(position))
# A tibble: 6 x 4
# Groups:   name, achieved [3]
  name  position achieved duplicated
  <fct>    <dbl>    <dbl> <lgl>     
1 a            1        1 FALSE     
2 b            2        0 FALSE     
3 b            1        0 FALSE     
4 b            2        0 TRUE      
5 a            2        1 FALSE     
6 a            2        0 FALSE

我知道此解决方案与我想要的解决方案很接近,但是它只为我带来了在第一个重复后的值。,但我还希望一种dplyr解决方案给我每个组所有重复的值,所以这可能有助于我提高对dplyr的理解。

所需的输出如下:

# A tibble: 6 x 4
# Groups:   name, achieved [3]
  name  position achieved duplicated
  <fct>    <dbl>    <dbl> <lgl>     
1 a            1        1 FALSE     
2 b            2        0 TRUE      
3 b            1        0 FALSE     
4 b            2        0 TRUE      
5 a            2        1 FALSE     
6 a            2        0 FALSE

谢谢。

2 个答案:

答案 0 :(得分:2)

尝试一下:

a %>%
  group_by_all() %>%
  mutate(duplicated = n() > 1)

答案 1 :(得分:2)

您似乎想按名称,职位和来访者进行分组,然后查看该组中是否有多个记录

a %>% group_by(name,achieved, position) %>% mutate(duplicated = n()>1)

#   name  position achieved duplicated
#  <fct>    <dbl>    <dbl> <lgl>     
# 1 a            1        1 FALSE     
# 2 b            2        0 TRUE      
# 3 b            1        0 FALSE     
# 4 b            2        0 TRUE      
# 5 a            2        1 FALSE     
# 6 a            2        0 FALSE