如何删除所有重复项以便NONE保留在数据框中?

时间:2012-12-07 12:35:26

标签: r duplicates unique r-faq

PHP有similar question,但我正在使用R而无法将解决方案转换为我的问题。

我有10行50列的数据框,其中一些行完全相同。如果我在它上面使用unique,我会得到一行 - 比方说 - “type”,但我真正想要的只是获得那些只出现一次的行。有谁知道我怎么能做到这一点?

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

3 个答案:

答案 0 :(得分:53)

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

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

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

两个布尔结果与|(逻辑'或')组合成一个新向量,表示所有行都出现多次。使用!取消了这个结果,从而创建了一个布尔向量,表示只出现一次的行。

答案 1 :(得分:1)

涉及dplyr的可能性可能是:

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

或者:

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

答案 2 :(得分:1)

尝试

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)), ]