关于r:如何删除所有重复项,以使NONE保留在数据框中?

How can I remove all duplicates so that NONE are left in a data frame?

PHP也有类似的问题,但是我正在使用R,并且无法将解决方案转换为我的问题。

我有10行50列的数据框,其中某些行是绝对相同的。 如果在其上使用unique,则每行仅获得一行-假设-"类型",但我真正想要的是仅获得仅出现一次的那些行。 有谁知道我怎么能做到这一点?

我可以看一下群集和热图来手动对其进行排序,但是与上面提到的数据帧(最多100行)相比,我拥有更大的数据帧,在这方面有些棘手。


这将提取仅出现一次的行(假设您的数据框名为df):

1
df[!(duplicated(df) | duplicated(df, fromLast = TRUE)), ]

工作原理:函数duplicated测试一行是否至少从第一行开始第二次出现。 如果使用参数fromLast = TRUE,则函数从最后一行开始。

两者的布尔结果都与|(逻辑"或")组合成一个新的向量,该向量指示所有行均出现多次。 使用!求反,从而创建一个布尔矢量,指示仅出现一次的行。


涉及dplyr的可能性可能是:

1
2
3
df %>%
 group_by_all() %>%
 filter(n() == 1)

要么:

1
2
3
df %>%
 group_by_all() %>%
 filter(!any(row_number() > 1))

试试吧

1
2
3
4
5
6
7
8
9
library(dplyr)

DF1 <- data.frame(Part = c(1,2,3,4,5), Age = c(23,34,23,25,24),  B.P = c(87,76,75,75,78))

DF2 <- data.frame(Part =c(3,5), Age = c(23,24), B.P = c(75,78))

DF3 <- rbind(DF1,DF2)

DF3 <- DF3[!(duplicated(DF3) | duplicated(DF3, fromLast = TRUE)), ]