2015-08-21 5 views
1

Давайте предположим следующий пример:тест, если значение является уникальным в векторе в R

test<-c(1:5,3:7) 

который дает

test 
[1] 1 2 3 4 5 3 4 5 6 7 

Я хотел бы иметь легкую функцию, которая возвращает TRUE, если значение является единственным в векторе.

[1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE 

Что я пробовал:

unique(test) дает мне обратно только уникальные значения, включая те, которые дублируются. duplicated(test) дает мне назад

[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE 

, который, очевидно, не требуемый результат, так как функциональные тесты для дублированных наблюдений в последовательности и первого вхождения не учитывается как дубликат. Я мог бы, конечно, изменить последовательность управления, включив fromLast = T и создать два вектора. Из этих двух я мог бы создать третью, которая показывает истинные уникальные значения ... но это довольно сложно.

table(test) позволяет мне вычислить появление каждого значения

test 
1 2 3 4 5 6 7 
1 1 2 2 2 1 1 

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


, так что кто-нибудь знает, как это сделать проще?

ответ

4

Оператор матча %in% очень полезен.

!test %in% test[duplicated(test)] 
0
test<-c(1:5,3:7) 
isUnique <- function(vector){ 
       return(!any(duplicated(vector))) 
      } 
isUnique(test) 

Функция возвращает истину, если значения вектора являются уникальными