2013-02-27 2 views
4

просто вопрос. У меня есть кадр данных (только один вектор показан), который выглядит следующим образом:Проверьте уникальные элементы

CLN1

б


с
д

... .

Я хотел бы следить г Выход:

CLN1
б
с
д

Другими словами, я хотел бы удалить все элементы, которые реплицируются. Функции «уникальный», а также «дублированный» возвращают выход, включая реплицированный элемент, представленный один раз. Я хотел бы удалить его окончательно.

ответ

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 –

+0

Большое вам спасибо! Это работает хорошо! – Fuv8

5

Вы можете использовать count из plyr пакета для подсчета вхождений элемента, и удалить все, кто встречается более чем один раз.

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

+3

Почему бы никому не хотеть использовать plyr;) –

+0

Это хороший момент :) – juba

2

Другой способ использования table:

С данными @ Джубы:

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

По данным О. П., так как его выход персонажа, as.numeric не обязательный.

names(which(table(v) == 1)) 
# [1] "b" "c" "d" 
Смежные вопросы