2009-07-23 13 views

Odpowiedz

28

Jest to jeden sposób na zrobienie tego. Po pierwsze mam indeksów, w którym x oznacza albo 8 lub 9. Następnie możemy sprawdzić, czy w tych indeksów, x jest rzeczywiście 8 i 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

Ale załóżmy Szukam konkretnych indeksów dwóch wartości bez ich zleceń posortowanych. Jak uzyskać wynik "26, 1" zamiast "1, 26", jeśli szukam indeksów Z i A w alfabecie? _which (litery% w% c ("z", "a")) _ – dasf

0

Ewentualnie, jeśli nie trzeba korzystać z indeksów, ale po prostu elementy można zrobić

> 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

można spróbować operatora | dla krótkich warunkach

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

grepl może przydatna funkcja. Zauważ, że grepl pojawia się w wersjach R 2.9.0 i nowszych. To, co jest przydatne w przypadku grepl polega na tym, że zwraca wektor logiczny o tej samej długości co 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 

Aby dotrzeć na odpowiedź, można wykonać następujące czynności

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

Lubię również grepl, świetne do filtrowania ramek danych na ciągach tekstowych itp. Dzięki za przykład OR - myślałem, że to będzie takie proste , ale wciąż próbowałem '||", która jest niewłaściwą składnią. – atomicules

+2

To bardzo niebezpieczne rozwiązanie. 'grepl (9, c (9, 99, 654649))' zwróci 'TRUE' dla wszystkich z nich. Trzeba bardzo uważać na dokładne dopasowania i wyrażenie regularne. –