Проверить, содержит ли вектор данный элемент

r vector r-faq

576915 просмотра

7 ответа

14597 Репутация автора

Как проверить, содержит ли вектор заданное значение?

Автор: medriscoll Источник Размещён: 23.07.2009 02:20

Ответы (7)


457 плюса

14597 Репутация автора

Решение

Для этого предназначены функции match()(возвращает первое появление) и %in%(возвращает логическое значение).

v <- c('a','b','c','e')

'b' %in% v
## returns TRUE

match('b',v)
## returns the first location of 'b', in this case: 2
Автор: medriscoll Размещён: 23.07.2009 02:25

34 плюса

87719 Репутация автора

Вы можете использовать %in%оператор:

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
Автор: ars Размещён: 23.07.2009 02:25

66 плюса

9608 Репутация автора

Функция 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
Автор: Dan Goldstein Размещён: 20.08.2009 10:12

18 плюса

181 Репутация автора

Также для нахождения позиции элемента «который» можно использовать как

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))]
Автор: Armin Размещён: 18.08.2013 01:12

161 плюса

2356 Репутация автора

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
Автор: Justin Nafe Размещён: 02.10.2013 12:03

10 плюса

323 Репутация автора

Мне действительно нравятся 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

Эти функции чувствительны к регистру.

Автор: ojdajuiceman Размещён: 03.12.2015 01:02

49 плюса

5809 Репутация автора

Я сгруппирую варианты, основанные на результатах. Предположим следующий вектор для всех примеров.

v <- c('z', 'a','b','a','e')

Для проверки наличия:

%в%

> 'a' %in% v
[1] TRUE

любой()

> any('a'==v)
[1] TRUE

is.element ()

> is.element('a', v)
[1] TRUE

Для нахождения первого случая:

матч()

> match('a', v)
[1] 2

Для нахождения всех вхождений как вектора индексов:

который()

> which('a' == v)
[1] 2 4

Чтобы найти все вхождения как логический вектор :

==

> 'a' == v
[1] FALSE  TRUE FALSE  TRUE FALSE

Изменить: Удаление grep () и grepl () из списка по причине, указанной в комментариях

Автор: ishandutta2007 Размещён: 07.06.2017 12:52
Вопросы из категории :
32x32