Поиск нескольких элементов в векторе

Предположим, что у меня есть следующий вектор:

> x <- sample(1:10,20,replace=TRUE)
> x
 [1]  8  6  9  9  7  3  2  5  5  1  6  8  5  2  9  3  5 10  8  2

Как я могу найти, какие элементы имеют значение 8 или 9?

Ответ 1

Это один из способов сделать это. Сначала я получаю индексы, в которых x равно 8 или 9. Тогда мы можем проверить, что по этим индексам x действительно 8 и 9.

> inds <- which(x %in% c(8,9))
> inds
[1]  1  3  4 12 15 19
> x[inds]
[1] 8 9 9 8 9 8

Ответ 2

Вы можете попробовать оператор | для коротких условий

which(x == 8 | x == 9)

Ответ 3

grepl может быть полезной функцией. Обратите внимание, что grepl отображается в версиях R 2.9.0 и более поздних. Что удобно в grepl, так это то, что он возвращает логический вектор той же длины, что и x.

grepl(8, x)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE

grepl(9, x)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
[13] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE

Чтобы прийти к вашему ответу, вы можете сделать следующее

grepl(8,x) | grepl(9,x)

Ответ 4

В качестве альтернативы, если вам не нужно использовать индексы, а только те элементы, которые вы можете сделать

> x <- sample(1:10,20,replace=TRUE)
> x
 [1]  6  4  7  2  9  3  3  5  4  7  2  1  4  9  1  6 10  4  3 10
> x[8<=x & x<=9]
[1] 9 9