2016-11-04 87 views
1

我有一個數據幀,每行有一個觀察值,每個主題有兩個觀察值。我想過濾出只有重複的'天'數字的行。從r中的數據幀過濾重複數據

ex <- data.frame('id'= rep(1:5,2), 'day'= c(1:5, 1:3,5:6))  

以下代碼會過濾掉第二個重複的行,但不是第一個。再次,我想過濾掉兩個重複的行。

ex %>% 
    group_by(id) %>% 
    filter(duplicated(day)) 

以下代碼有效,但看起來很笨重。有沒有人有更有效的解決方案?

ex %>% 
    group_by(id) %>% 
    filter(duplicated(day, fromLast = TRUE) | duplicated(day, fromLast = FALSE)) 

回答

2

duplicated可以對整個數據集被應用,這可以用base R方法來完成。

ex[duplicated(ex)|duplicated(ex, fromLast = TRUE),] 

使用dplyr,我們只能當行(n())的數量爲group_by都列和filter大於1

ex %>% 
    group_by(id, day) %>% 
    filter(n()>1) 
1

單tidyverse管:

exSinglesOnly <- 
    ex %>% 
    group_by(id,day) %>% # the complete group of interest 
    mutate(duplicate = n()) %>% # count number in each group 
    filter(duplicate == 1) %>% # select only unique records 
    select(-duplicate) # remove group count column 
> exSinglesOnly 
Source: local data frame [4 x 2] 
Groups: id, day [4] 

    id day 
    <int> <int> 
1  4  4 
2  5  5 
3  4  5 
4  5  6 
+0

哦,我沒有見過@ Akrun的第二個答案。這與之相似,但我會留下來幫助解釋與完整分組和後續過濾有關的邏輯。 –