2010-11-17 8 views
7

w R, powiedzmy mamy wektor
area = c(rep(c(26:30), 5), rep(c(500:504), 5), rep(c(550:554), 5), rep(c(76:80), 5)) i inny wektor yield = c(1:100).
teraz, że chcę do indeksu tak:W R: wektory do ustalania przez logicznego porównywania wartości w zakresie indeksów ==: C (min: maks)

> yield[area==27] 
[1] 2 7 12 17 22 
> yield[area==501] 
[1] 27 32 37 42 47 

Nie ma problemu, prawda? Ale dziwne rzeczy zaczynają się dziać, gdy próbuję go indeksować, używając c(A, B). (I jeszcze dziwniejsze, gdy próbuję c(min:max) ...)

> yield[area==c(27,501)] 
[1] 7 17 32 42 

Co ja spodziewałem się oczywiście przypadki, które są obecne w obu innych przykładach, a nie tylko niektóre dziwne ich kombinacją. To działa, kiedy mogę używać rury lub operatora:

> yield[area==27 | area==501] 
[1] 2 7 12 17 22 27 32 37 42 47 

ale co jeśli ja pracuję z wieloma? Powiedz, że chcę indeksować według zakresu c(27:503)? W moim prawdziwym przykład istnieje wiele więcej punktów i zakresy danych, więc to sprawia, że ​​więcej sensu, proszę nie sugerować to zrobić ręcznie, co w istocie znaczy:

yield[area==27 | area==28 | area==29 | ... | area==303 | ... | area==500 | area==501] 

Musi istnieć lepszy sposób. ..

Odpowiedz

6

Chcesz użyć %in%. Zauważ również, że c(27:503) i 27:503 dają ten sam obiekt.

> yield[area %in% 27:503] 
[1] 2 3 4 5 7 8 9 10 12 13 14 15 17 
[14] 18 19 20 22 23 24 25 26 27 28 29 31 32 
[27] 33 34 36 37 38 39 41 42 43 44 46 47 48 
[40] 49 76 77 78 79 80 81 82 83 84 85 86 87 
[53] 88 89 90 91 92 93 94 95 96 97 98 99 100 
+0

Awesome, thanks :) Również, gdzie na ziemi jest to udokumentowane? Jak mam to znaleźć bez pytania? O co proszę o pomoc? Nieprzydatna pomoc, którą nazywam: P – gakera

+0

@gakera: jest w "meczu". Powinieneś go znaleźć, odgadując lepsze słowa kluczowe lub czytając pełną instrukcję obsługi. :-P Myślę, że po raz pierwszy natknąłem się na 'match' przez sekcję" Zobacz także "w'? Grep'. –

+0

Haha, zgaduj lepsze słowa kluczowe lub przeczytaj pełną instrukcję, uwielbiam to! R jest przyjazny dla użytkownika: D Jeszcze raz dziękuję. – gakera

1

Dlaczego nie używać podzbioru?

subset(yield, area > 26 & area < 504) ## for indexes 
subset(area, area > 26 & area < 504) ## for values 
+0

Dlaczego jej nie używać? Jedną z przyczyn: należy zwrócić uwagę na sekcję Ostrzeżenie w '' podzbiorze', ponieważ 'yield [obszar> 26 i obszar <504]' jest równoważny. –

+0

Jaka sekcja ostrzeżenia? –

+1

Ostrzeżenie: Jest to funkcja wygody przeznaczona do interaktywnego użytku. Do programowania lepiej używać standardowych funkcji podzbioru, takich jak "[", a w szczególności niestandardowa ocena argumentu "podzbioru" może mieć nieprzewidziane konsekwencje. –

Powiązane problemy