对于这个问题,我将举一个例子使用Remove duplicated rows using dplyr
set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
x y z
1 0 1 1
2 1 0 2
3 0 1 3
4 1 1 4
5 1 0 5
6 0 1 6
7 1 0 7
8 1 0 8
9 1 0 9
10 0 1 10
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
该示例的问题在于它保留一行并删除其他重复的行。我需要完全删除所有重复的行。
最终结果应该只有唯一的一行:
x y z
4 1 1 4
已在此处回答:How can I remove all duplicates so that NONE are left in a data frame?
谢谢Jaap。我保证我搜索了很多东西,发现的所有结果都和我发布的示例一样。
答案 0 :(得分:0)
我们也可以将duplicated
与fromLast
一起使用。对于与第二个元素重复的行,仅duplicated
会为TRUE,即,如果值为1, 2, 1, 2 3
,则duplicated
会得到FALSE, FALSE, TRUE, TRUE, FALSE
。为了使第一个和第二个都为TRUE,我们需要反向应用(fromLast = TRUE
),然后用|
换行给出其中一个
df[!(duplicated(df[,1:2])|duplicated(df[1:2], fromLast = TRUE)),]
# x y z
#4 1 1 4
或者另一个选择是
library(dplyr)
df %>%
group_by(x, y) %>%
filter(n() == 1)
df <- structure(list(x = c(0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L),
y = c(1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L), z = 1:10), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))