2015-11-14 79 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