2009-07-23 4 views

risposta

28

Questo è un modo per farlo. In primo luogo ho gli indici in cui X è 8 o 9. Poi si può verificare che in tali indici, x è infatti 8 e 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

Ma supponiamo che sto cercando gli indici specifici dei due valori senza i loro ordini ordinati. Come potrei ottenere un risultato di "26, 1" invece di "1, 26" se sto cercando gli indici di Z e A nell'alfabeto? _which (lettere% in% c ('z', 'a')) _ – dasf

0

Alternativamente, se non è necessario utilizzare gli indici, ma solo gli elementi che possono fare

> 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

si potrebbe provare l'operatore | per condizioni di corto

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

grepl forse una funzione utile. Notare che grepl viene visualizzato nelle versioni di R 2.9.0 e successive. Quello che è utile su grepl è che restituisce un vettore logico della stessa lunghezza di 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 

per arrivare a risposta, si potrebbe fare la seguente

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

Mi piace anche grepl, ottimo per filtrare i dati su stringhe di testo, ecc. Grazie per l'esempio OR - ho pensato che sarebbe stato così semplice , ma ho continuato a provare '||' che è la sintassi sbagliata. – atomicules

+2

Questa è una soluzione molto pericolosa. 'grepl (9, c (9, 99, 654649))' restituirà 'TRUE' per tutti questi. Si dovrebbe fare molta attenzione con corrispondenze esatte e regex. –