2015-11-14 20 views
1

我想只保留數據集中的非重複行。這比「刪除重複項目」要進一步。也就是說,我想消除重複行的所有副本,而不僅僅是重複副本,並且只保留那些從不重複的行。從數據框中刪除所有重複行的副本(不只是重複的副本)

數據集:

df <- data.frame(A = c(5,5,6,7,8,8,8), B = sample(1:100, 7)) 
    df 
    A B 
    5 91 
    5 46 
    6 41 
    7 98 
    8 35 
    8 56 
    8 36 

想要把它變成:

A B 
    6 41 
    7 98 

這裏是我嘗試使用dplyr:

df_single <- df %>% count(A) %>% filter(n == 1) 
    # Returns all the values of A for which only one row exists 

    df %>% filter(A == df_single$A) 
    # Trying to subset only those values of A, but this returns error 
    # "longer object length is not a multiple of shorter object length" 

感謝您的幫助。一個好的獎勵是做相反的附加代碼(保留所有OTHER行 - 即只消除數據集中非重複的行)。

回答

3

試試這個(沒有所需的軟件包):

subset(df, !duplicated(A) & !duplicated(A, fromLast = TRUE)) 

捐贈:

A B 
3 6 41 
4 7 98 
+0

謝謝!這是一個聰明的解決方案。顯然我需要提高我的谷歌搜索技巧,因爲我找不到重複的問題/答案。 – gnotnek

相關問題