2010-08-10 14 views
40

Mam duży plik CSV z wynikami ankiety medycznej z różnych lokalizacji (lokalizacja jest czynnikiem obecnym w danych). Ponieważ niektóre analizy są specyficzne dla lokalizacji i dla wygody, chciałbym wyodrębnić podramki z wierszami tylko z tych lokalizacji. Zdarza się, że lokalizacja jest pierwszym polem, więc tak, mógłbym to zrobić, sortując wiersze CSV, ale chciałbym nauczyć się, jak to zrobić w R, ponieważ jestem pewien, że będę potrzebował tego dla innych kolumn.jak wyodrębnić podzbiór ramki danych na podstawie warunku dotyczącego pola?

Tak więc, w dużym skrócie, pytanie brzmi: biorąc pod uwagę ramkę danych foo, w jaki sposób mogę utworzyć kolejny pasek ramek danych, który zawiera tylko wiersze od foo, gdzie foo $ location = 'there'?

Wielkie dzięki.

Odpowiedz

72

Oto dwa główne podejścia. Wolę to jedno za jego czytelność:

bar <- subset(foo, location == "there") 

pamiętać, że mogą razem ciąg wielu warunkowe z & i | do tworzenia złożonych podzbiory.

Drugi to podejście indeksujące. Możesz indeksować wiersze w R za pomocą numerycznych lub boolowskich wycinków. foo$location == "there" zwraca wektor o wartościach T i F o tej samej długości co wiersze z foo. Możesz to zrobić, aby zwrócić tylko te wiersze, w których warunek zwróci true.

foo[foo$location == "there", ] 
+0

. @ JoFrhwld - Czy nie jest preferowana metoda 'subset()'? Szczegółowa dyskusja [tutaj] (https://stackoverflow.com/questions/9860090/why-is-better-than-subset) –

+0

Czy istnieje prosty sposób dostępu do podzbioru i foo minus podzbiór? Chcę podzielić moje dane na pasek i (foo-bar). Oczywiście, mogłem powtórzyć powyższe z! =, Ale czy jest tam jedna droga liniowa? – schoon

Powiązane problemy