从数据框中删除重复行的所有副本(而不仅仅是重复的副本)

时间:2015-11-14 03:16:18

标签: r

我想在数据集中只保留非重复的行。这比“删除重复”更进了一步;也就是说,我想要删除重复行的所有副本,而不仅仅是重复的副本,并且只保留从未首先复制过的行。

数据集:

    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行 - 即,仅从数据集中消除非重复行)。

1 个答案:

答案 0 :(得分:3)

试试这个(不需要包裹):

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

,并提供:

  A  B
3 6 41
4 7 98