Найти дублированные элементы с помощью dplyr
Я попытался использовать представленный код здесь, чтобы найти ВСЕ дублированные элементы с dplyr следующим образом:
library(dplyr)
mtcars %>%
mutate(cyl.dup = cyl[duplicated(cyl) | duplicated(cyl, from.last = TRUE)])
Как мне преобразовать представленный код здесь, чтобы найти ВСЕ дублированные элементы с dplyr? Мой код выше просто порождает ошибку? Или еще лучше, есть ли еще одна функция, которая будет достигать этого более лаконично, чем запутанный подход x[duplicated(x) | duplicated(x, from.last = TRUE)])
?
Ответы
Ответ 1
Я думаю, вы могли бы использовать filter
для этой цели:
mtcars %>%
group_by(carb) %>%
filter(n()>1)
Небольшой пример (обратите внимание, что я добавил summarize()
, чтобы доказать, что результирующий набор данных не содержит строк с дублирующимся "carb" . Я использовал "carb" вместо "cyl", потому что "carb" имеет уникальные значения, тогда как "cyl 'не):
mtcars %>% group_by(carb) %>% summarize(n=n())
#Source: local data frame [6 x 2]
#
# carb n
#1 1 7
#2 2 10
#3 3 3
#4 4 10
#5 6 1
#6 8 1
mtcars %>% group_by(carb) %>% filter(n()>1) %>% summarize(n=n())
#Source: local data frame [4 x 2]
#
# carb n
#1 1 7
#2 2 10
#3 3 3
#4 4 10
Ответ 2
Мы можем найти дублированные элементы с dplyr следующим образом.
library(dplyr)
# Only duplicated elements
mtcars %>%
filter(duplicated(.[["carb"]])
# All duplicated elements
mtcars %>%
filter(carb %in% unique(.[["carb"]][duplicated(.[["carb"]])]))