2014-12-05 2 views
3

В R, как вы проверяете элементы одного вектора, не присутствующие в другом векторе?R, все ли элементы X присутствуют в Y

X <- c('a','b','c','d') 
Y <- c('b', 'e', 'a','d','c','f', 'c') 

Я хочу знать, все ли элементы X присутствуют в Y? (ИСТИНА или ЛОЖЬ ответ)

+0

Каково ожидаемое поведение в случае, когда Карл Виттоф показал в своем ответе? –

ответ

2

Вы хотите setdiff:

> setdiff(X, Y) # all elements present in X but not Y 
character(0) 

> length(setdiff(X, Y)) == 0 
[1] TRUE 
+0

Но см. Мой ответ с 'vsetdiff' на всякий случай –

+0

@CarlWitthoft, ваш ответ где? –

+0

@beginneR «Терпение, кузнечик» :-). Я отправил комментарий перед отправкой ответа - теперь должен быть виден –

3

Вы можете использовать all и %in%, чтобы проверить, если все значения X также в Y:

all(X %in% Y) 
#[1] TRUE 
+1

Это хорошо, почти как английский :-) – TMS

+0

Да, довольно легко понятно, действительно –

2

Предупреждение о setdiff : если ваши входные векторы имеют повторяющиеся элементы, то setdiff будет игнорировать дубликаты. Это может быть или не быть тем, что вы хотите сделать.

Я написал пакет vecsets, и вот разница в том, что вы получите. Обратите внимание, что я изменил X, чтобы продемонстрировать поведение.

library(vecsets) 
X <- c('a','b','c','d','d') 
Y <- c('b', 'e', 'a','d','c','f', 'c') 
setdiff(X,Y) 
    character(0) 
vsetdiff(X,Y) 
[1] "d" 
+0

Я думаю, что из вопроса OP ясно, что дубликаты не имеют значения, так как он хочет знать, есть ли «все элементы X присутствуют в Y "*. Кроме того, термин ** [set] (https://en.wikipedia.org/wiki/Set_ (математика)) ** означает, что дубликаты или порядок не имеют значения. Поэтому вы не должны использовать термин «set» в имени вашего пакета/функций, так как это будет очень запутанным. – TMS

+0

@TMS Как ни странно, я интерпретирую «все элементы X» как смысл каждого элемента вектора, а не уникальных элементов приведенного алгебраического множества. Я буду придерживаться «набора» в именах моих функций, несмотря на риск путаницы, поскольку я рассматриваю его как компаньона, а не конкурента, операций с алгебраическими множествами. –

Смежные вопросы