Проверить, содержит ли вектор заданный элемент
Как проверить, содержит ли вектор заданное значение?
7 ответов
и match()
(возвращает первое появление) и (возвращает логическое значение).
v <- c('a','b','c','e')
'b' %in% v
## returns TRUE
match('b',v)
## returns the first location of 'b', in this case: 2
is.element()
делает для более читаемого кода и идентичен %in%
v <- c('a','b','c','e')
is.element('b', v)
'b' %in% v
## both return TRUE
is.element('f', v)
'f' %in% v
## both return FALSE
subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE
на any () функция делает для читаемого кода
> w <- c(1,2,3)
> any(w==1)
[1] TRUE
> v <- c('a','b','c')
> any(v=='b')
[1] TRUE
> any(v=='f')
[1] FALSE
Я сгруппирую параметры на основе выходных данных. Предположим, что для всех примеров используется следующий вектор.
v <- c('z', 'a','b','a','e')
проверить наличие:
%в%
> 'a' %in% v
[1] TRUE
any ()
> any('a'==v)
[1] TRUE
есть.element ()
> is.element('a', v)
[1] TRUE
для нахождения первого occurance:
match ()
> match('a', v)
[1] 2
для нахождения всех вхождений в вектор индексов:
что()
> which('a' == v)
[1] 2 4
для поиска всех событий в качестве логического вектора:
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
изменить: Удаление grep () и grepl() из списка по причине упоминается в комментариях
также найти положение элемента "который" можно использовать как
pop <- c(3,4,5,7,13)
which(pop==13)
и, чтобы найти элементы, которые не содержатся в целевом векторе, можно сделать так:
pop <- c(1,2,4,6,10)
Tset <- c(2,10,7) # Target set
pop[which(!(pop%in%Tset))]
мне очень нравятся grep () и grepl () для этой цели.
grep () возвращает вектор целых чисел, которые указывают, где совпадения.
yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4
grepl () возвращает логический вектор с "TRUE" в месте совпадения.
yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
эти функции чувствительны к регистру.