Поиск нескольких элементов в векторе
Предположим, что у меня есть следующий вектор:
> 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