删除R中的所有重复行

时间:2014-07-22 08:01:58

标签: r

我有一个data.frame有重复的观察,如何删除所有重复的基于第一列(如果他们的第一个数据是相同的,然后完全删除这些条目?

> a=c(1,4,5,5,6,6)
> b=c(2,5,7,4,4,2)
> c=c("a","b","c","a","b","c")
> test=data.frame(a,b,c)
> test
  a b c
1 1 2 a
2 4 5 b
3 5 7 c
4 5 4 a
5 6 4 b
6 6 2 c

我不想保留任何重复的行,以便我的最终输出为

  a b c
1 1 2 a
2 4 5 b

我尝试了uniqueduplicate功能,但它们都保留了第一个重复的行(即,如果有5个重复记录,那么其中4个将被删除),例如

  a b c
1 1 2 a
2 4 5 b
3 5 7 c
4 6 4 b

我该怎么办?谢谢!

5 个答案:

答案 0 :(得分:2)

您可以使用table()获取列的频率表,然后将结果用于子集:

singletons <- names(which(table(test$a) == 1))
test[test$a %in% singletons, ]

  a b c
1 1 2 a
2 4 5 b

答案 1 :(得分:1)

首先搜索重复行的第一列值:

val <- test[duplicated(test[,1]),1]
[1] 5 6

然后搜索可以找到这些值的行

rows <- test[,1] %in% test[duplicated(test[,1]),1]
[1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE

然后选择除以下行之外的所有行:

test[! rows,]
  a b c
1 1 2 a
2 4 5 b

答案 2 :(得分:1)

使用dplyr

require(dplyr)
test <- test %>% group_by(a) %>% filter(n()==1)
test

  a b c
1 1 2 a
2 4 5 b

答案 3 :(得分:0)

奇怪的请求,但是如果要删除任何列中存在重复的行而忽略其他列:

test[!duplicated(test$a) & ! duplicated(test$b) & ! duplicated(test$c),]
  a b c
1 1 2 a
2 4 5 b
3 5 7 c

但我不知道&#39; 5 7 c&#39;在您的示例中是重复的。

答案 4 :(得分:0)

轻松一步删除重复项:

my_df <- my_df[-which(duplicated(my_df)), ]