2009-07-23 2 views

ответ

28

Это один из способов сделать это. Во-первых я получаю индексы, при которых х является либо 8 или 9. Тогда можно проверить, что в этих индексов х действительно 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 
+0

Но предположит, что я ищу конкретные показатели двух значений без их заказов, отсортированных. Как получить результат «26, 1» вместо «1, 26», если я ищу индексы Z и A в алфавите? _which (буквы% in% c ('z', 'a')) _ – dasf

0

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

> 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 
6

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

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

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) 
+0

Мне нравится grepl, отлично подходит для фильтрации данных в текстовых строках и т. Д. Спасибо за пример OR - я думал, что это будет так просто , но я продолжал пробовать '||', что является неправильным синтаксисом. – atomicules

+2

Это очень опасное решение. 'grepl (9, c (9, 99, 654649))' вернет 'TRUE' для всех этих. Нужно быть очень осторожным с точными совпадениями и регулярным выражением. –