2015-01-30 15 views
27

tôi đã cố gắng sử dụng mã được trình bày here để tìm TẤT CẢ các yếu tố trùng lặp với dplyr như thế này:Tìm các yếu tố nhân đôi với dplyr

library(dplyr) 

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

Làm thế nào tôi có thể chuyển đổi mã trình bày here để tìm TẤT CẢ các yếu tố trùng lặp với dplyr? Mã của tôi ở trên chỉ ném một lỗi? Hoặc thậm chí tốt hơn, có một chức năng khác sẽ đạt được điều này ngắn gọn hơn cách tiếp cận phức tạp x[duplicated(x) | duplicated(x, from.last = TRUE)]) không?

Trả lời

56

Tôi đoán bạn có thể sử dụng filter cho mục đích này:.

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

dụ nhỏ (lưu ý rằng tôi đã thêm summarize() để chứng minh rằng kết quả tập hợp dữ liệu không chứa hàng với bản sao 'carb' Tôi đã từng 'carb 'thay vì' cyl 'vì' carb 'có các giá trị duy nhất trong khi' cyl 'không có):

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

Chúng ta có thể tìm các phần tử trùng lặp với dplyr như sau.

library(dplyr) 

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

# All duplicated elements 
mtcars %>% 
    filter(carb %in% unique(.[["carb"]][duplicated(.[["carb"]])])) 
Các vấn đề liên quan