2013-02-27 101 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"