2013-02-27 74 views
4

只是一个简单的问题。 我有一个数据帧(仅一个向量被示出),看起来像:检查独特元素

CLN1

b


Ç
d

... 。

我想跟随克输出:

CLN1
b
Ç
d

换句话说,我想删除被复制的所有项目。函数“unique”以及“duplicated”返回包含一次代表的复制元素的输出。我想明确地删除它。

回答

9

您可以使用setdiff为:

R> v <- c(1,1,2,2,3,4,5) 
R> setdiff(v, v[duplicated(v)]) 
[1] 3 4 5 
+0

+1对于使用普通R的紧凑解决方案 – 2013-02-27 14:15:46

+0

非常感谢您的支持!它运作良好! – Fuv8 2013-02-27 14:21:41

5

你可以使用countplyr包来算项目的出现次数,并删除谁发生不止一次所有。

library(plyr) 
l = c(1,2,3,3,4,5,6,6,7) 
count_l = count(l) 
    x freq 
1 1 1 
2 2 1 
3 3 2 
4 4 1                   
5 5 1                   
6 6 2                   
7 7 1 
l[!l %in% with(count_l, x[freq > 1])] 
[1] 1 2 4 5 7 

注意!,这意味着NOT。当然,你把这个在oneliner:

l[!l %in% with(count(l), x[freq > 1])] 
+0

如果你不想使用'plyr',我想你应该可以用'data.frame(table(l))'做同样的事情。 – juba 2013-02-27 14:19:44

+3

为什么没有人不想使用plyr;) – 2013-02-27 14:20:11

+0

这是一个很好的观点:) – juba 2013-02-27 14:20:41

2

使用table另一种方式:

随着@朱巴的数据:

as.numeric(names(which(table(v) == 1))) 
# [1] 3 4 5 

对于OP的数据,因为它的字符输出,as.numeric不需要。

names(which(table(v) == 1)) 
# [1] "b" "c" "d"