我想在数据集中只保留非重复的行。这比“删除重复”更进了一步;也就是说,我想要删除重复行的所有副本,而不仅仅是重复的副本,并且只保留从未首先复制过的行。
数据集:
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行 - 即,仅从数据集中消除非重复行)。
答案 0 :(得分:3)
试试这个(不需要包裹):
subset(df, !duplicated(A) & !duplicated(A, fromLast = TRUE))
,并提供:
A B
3 6 41
4 7 98