2015-01-30 25 views
27

Próbowałem przy użyciu kodu przedstawiony here znaleźć wszystkie zduplikowane elementy z dplyr tak:Znajdź zduplikowane elementy z dplyr

library(dplyr) 

mtcars %>% 
mutate(cyl.dup = cyl[duplicated(cyl) | duplicated(cyl, from.last = TRUE)]) 

Jak mogę przekonwertować kod przedstawiony here znaleźć wszystkie zduplikowane elementy z dplyr? Mój kod powyżej po prostu powoduje błąd? A może jeszcze lepiej, czy istnieje inna funkcja, która osiągnie to bardziej zwięźle, niż skomplikowane podejście?

Odpowiedz

56

Chyba można używać filter do tego celu.

mtcars %>% 
    group_by(carb) %>% 
    filter(n()>1) 

mały przykład (zauważ, że dodałem summarize() udowodnić, że otrzymany zestaw danych nie zawiera wiersze z duplikatu „węglowodanów” użyłem „carb 'zamiast «cyl», ponieważ «» węglowodanów posiada unikalne wartości natomiast «cyl» nie):

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 
6

Możemy znaleźć zduplikowane elementy z dplyr następująco.

library(dplyr) 

# Only duplicated elements 
mtcars %>% 
    filter(duplicated(.[["carb"]]) 

# All duplicated elements 
mtcars %>% 
    filter(carb %in% unique(.[["carb"]][duplicated(.[["carb"]])])) 
Powiązane problemy