Проверить, содержит ли вектор данный элемент
576915 просмотра
7 ответа
Как проверить, содержит ли вектор заданное значение?
Автор: medriscoll Источник Размещён: 26.07.2019 03:51Ответы (7)
457 плюса
Для этого предназначены функции 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
161 плюса
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
66 плюса
Функция 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
49 плюса
Я сгруппирую варианты, основанные на результатах. Предположим следующий вектор для всех примеров.
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:5234 плюса
Вы можете использовать %in%
оператор:
vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
Автор: ars
Размещён: 23.07.2009 02:25
18 плюса
Также для нахождения позиции элемента «который» можно использовать как
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
10 плюса
Мне действительно нравятся 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Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- vector Объединение двух стандартных: векторов
- vector Как отсортировать std :: vector по значениям другого std :: vector?
- vector Стирание элементов из вектора
- vector Векторная графика в iText PDF
- vector Лучший способ извлечь подвектор из вектора?
- r-faq Проверить, содержит ли вектор данный элемент
- r-faq Поиск всех позиций для нескольких элементов в векторе
- r-faq Разница между скобками [] и двойной скобкой [[]] для доступа к элементам списка или кадра данных
- r-faq Уровни коэффициента отбрасывания в заданном кадре данных
- r-faq Как отсортировать фрейм данных по нескольким столбцам