2009-07-23 14 views

Respuesta

28

Esta es una forma de hacerlo. En primer lugar consigo los índices en los que x es 8 o 9. A continuación, podemos comprobar que en esos índices, x es de hecho 8 y 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

Pero supongamos que estoy buscando los índices específicos de dos valores sin sus pedidos ordenados. ¿Cómo obtendré un resultado de "26, 1" en lugar de "1, 26" si estoy buscando los índices de Z y A en el alfabeto? _which (letras% en% c ('z', 'a')) _ – dasf

0

alternativa, si no es necesario utilizar los índices, pero sólo los elementos que pueden hacer

> 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

puede probar con el operador | para condiciones cortos

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

grepl tal vez una función útil. Tenga en cuenta que grepl aparece en las versiones de R 2.9.0 y posteriores. Lo útil de grepl es que devuelve un vector lógico de la misma longitud que 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 

para llegar a su respuesta, usted podría hacer lo siguiente

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

También me gusta grepl, ideal para filtrar marcos de datos en cadenas de texto, etc. Gracias por el ejemplo O: pensé que sería así de simple , pero seguí intentando '||' que es la sintaxis incorrecta. – atomicules

+2

Esta es una solución muy peligrosa. 'grepl (9, c (9, 99, 654649))' devolverá 'TRUE' para todos estos. Uno debe tener mucho cuidado con las coincidencias exactas y expresiones regulares. –

Cuestiones relacionadas