Wyodrębnij podzbiór ramki danych na podstawie warunku obejmującego pole

Mam duży plik CSV z wynikami badań medycznych z różnych lokalizacji (lokalizacja jest czynnikiem obecnym w danych). Ponieważ niektóre analizy są specyficzne dla danej lokalizacji i dla wygody, chciałbym wyodrębnić ramki podrzędne 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 dowiedzieć się, jak to zrobić w R, ponieważ jestem pewien, że będę tego potrzebował dla innych kolumn.

Więc, w w skrócie, pytanie brzmi: biorąc pod uwagę ramkę danych foo, Jak mogę utworzyć kolejny pasek ramki danych, który zawiera tylko wiersze z foo gdzie foo$location = 'there'?

Author: zx8754, 2010-08-10

2 answers

Oto dwa główne podejścia. Wolę ten ze względu na jego czytelność:

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

Zauważ, że możesz połączyć wiele warunków za pomocą & i |, aby utworzyć złożone podzbiory.

Druga to metoda indeksowania. Wiersze w R można indeksować za pomocą plasterków numerycznych lub logicznych. foo$location == "there" zwraca wektor wartości T i F o tej samej długości co wiersze foo. Możesz to zrobić, aby zwrócić tylko wiersze, w których warunek zwraca true.

foo[foo$location == "there", ]
 115
Author: JoFrhwld,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-10 02:28:39

Aby rozszerzyć powyższą odpowiedź, Możesz również indeksować swoje kolumny, zamiast określać nazwy kolumn, które mogą być przydatne w zależności od tego, co robisz. Biorąc pod uwagę, że Twoja lokalizacja jest pierwszym polem, wyglądałoby to tak:

    bar <- foo[foo[ ,1] == "there", ]

Jest to przydatne, ponieważ możesz wykonywać operacje na wartości kolumny, takie jak zapętlanie określonych kolumn(i możesz zrobić to samo, indeksując numery wierszy).

Jest to również przydatne, jeśli musisz wykonać jakąś operację na więcej niż jedną kolumnę, ponieważ można wtedy określić zakres kolumn:

    foo[foo[ ,c(1:N)], ]

Lub konkretnych kolumn, jak można się spodziewać.

    foo[foo[ ,c(1,5,9)], ]
 4
Author: DryLabRebel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-30 20:02:13