Фильтровать только строки, которые дублируются с помощью dplyr - PullRequest
0 голосов
/ 20 февраля 2019

Я уже некоторое время пытаюсь решить проблему, близкую к той, которая была представлена ​​на этой проблеме , но безуспешно.Это заключается в фильтрации элементов, которые дублируются в группе, а также с учетом исходного, использованного для сравнения с 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 голосов
/ 20 февраля 2019

Кажется, что вы хотите сгруппировать по всем именам, позициям и полученным результатам, а затем просто посмотреть, есть ли в этой группе более одной записи

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  
0 голосов
/ 20 февраля 2019

Попробуйте это:

a %>%
  group_by_all() %>%
  mutate(duplicated = n() > 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...