Как фильтровать строки в R


Часто вас может заинтересовать подмножество фрейма данных на основе определенных условий в R. К счастью, это легко сделать с помощью функции filter() из пакета dplyr .

library(dplyr)

В этом руководстве объясняется несколько примеров того, как использовать эту функцию на практике, используя встроенный набор данных dplyr под названием starwars :

#view first six rows of starwars dataset
head(starwars)

# A tibble: 6 x 13
 name height mass hair_color skin_color eye_color birth_year gender homeworld

1 Luke~ 172 77 blond fair blue 19 male Tatooine 
2 C-3PO 167 75 <NA> gold yellow 112 <NA> Tatooine 
3 R2-D2 96 32 <NA> white, bl~ red 33 <NA> Naboo 
4 Dart~ 202 136 none white yellow 41.9 male Tatooine 
5 Leia~ 150 49 brown light brown 19 female Alderaan 
6 Owen~ 178 120 brown, gr~ light blue 52 male Tatooine 
# ... with 4 more variables: species , films , vehicles ,
# starships

Пример 1: фильтрация строк, равных некоторому значению

В следующем коде показано, как отфильтровать набор данных для строк, в которых переменная «species» равна Droid.

starwars %>% filter(species == 'Droid')

# A tibble: 5 x 13
 name height mass hair_color skin_color eye_color birth_year gender homeworld

1 C-3PO 167 75 gold yellow 112 Tatooine 
2 R2-D2 96 32 white, bl~ red 33 Naboo 
3 R5-D4 97 32 white, red red NA Tatooine 
4 IG-88 200 140 none metal red 15 none 
5 BB8 NA NA none none black NA none 
# ... with 4 more variables: species , films , vehicles ,
# starships

Мы видим, что 5 строк в наборе данных соответствуют этому условию, на что указывает #A tibble: 5 x 13 .

Пример 2. Фильтрация строк с использованием оператора «И»

Мы также можем отфильтровать строки, в которых вид — Droid, а цвет глаз — красный:

starwars %>% filter(species == 'Droid ' & eye_color == 'red')

# A tibble: 3 x 13
 name height mass hair_color skin_color eye_color birth_year gender homeworld

1 R2-D2 96 32 <NA> white, bl~ red 33 <NA> Naboo 
2 R5-D4 97 32 <NA> white, red red NA <NA> Tatooine 
3 IG-88 200 140 none metal red 15 none <NA> 
# ... with 4 more variables: species , films , vehicles ,
# starships

Мы видим, что 3 строки в наборе данных соответствуют этому условию.

Пример 3. Фильтрация строк с использованием оператора «ИЛИ»

Мы также можем отфильтровать строки, в которых вид — Droid или цвет глаз — красный:

starwars %>% filter(species == 'Droid ' | eye_color == 'red')

# A tibble: 7 x 13
 name height mass hair_color skin_color eye_color birth_year gender homeworld

1 C-3PO 167 75 <NA> gold yellow 112 <NA> Tatooine 
2 R2-D2 96 32 <NA> white, bl~ red 33 <NA> Naboo 
3 R5-D4 97 32 <NA> white, red red NA <NA> Tatooine 
4 IG-88 200 140 none metal red 15 none <NA> 
5 Bossk 190 113 none green red 53 male Trandosha
6 Nute~ 191 90 none mottled g~ red NA male Cato Nei~
7 BB8 NA NA none none black NA none <NA> 
# ... with 4 more variables: species , films , vehicles ,
# starships

Мы видим, что этому условию удовлетворяют 7 строк в наборе данных.

Пример 4. Фильтрация строк со значениями в списке

Мы также можем отфильтровать строки, в которых цвет глаз находится в списке цветов:

starwars %>% filter(eye_color %in% c('blue', 'yellow', 'red'))

# A tibble: 35 x 13
 name height mass hair_color skin_color eye_color birth_year gender

 1 Luke~ 172 77 blond fair blue 19 male 
 2 C-3PO 167 75 <NA> gold yellow 112 <NA> 
 3 R2-D2 96 32 <NA> white, bl~ red 33 <NA> 
 4 Dart~ 202 136 none white yellow 41.9 male 
 5 Owen~ 178 120 brown, gr~ light blue 52 male 
 6 Beru~ 165 75 brown light blue 47 female
 7 R5-D4 97 32 <NA> white, red red NA <NA> 
 8 Anak~ 188 84 blond fair blue 41.9 male 
 9 Wilh~ 180 NA auburn, g~ fair blue 64 male 
10 Chew~ 228 112 brown unknown blue 200 male 
# ... with 25 more rows, and 5 more variables: homeworld , species ,
# films , vehicles , starships

Мы видим, что 35 строк в наборе данных имели синий, желтый или красный цвет глаз.

Связанный: Как использовать оператор %in% в R (с примерами)

Пример 5: фильтрация строк с использованием меньше или больше

Мы также можем фильтровать строки, используя операции меньше или больше над числовыми переменными:

#find rows where height is greater than 250
starwars %>% filter(height > 250)

# A tibble: 1 x 13
 name height mass hair_color skin_color eye_color birth_year gender homeworld

1 Yara~ 264 NA none white yellow NA male Quermia 
# ... with 4 more variables: species , films , vehicles ,
# starships 

#find rows where height is between 200 and 220
starwars %>% filter(height > 200 & height < 220)

# A tibble: 5 x 13
 name height mass hair_color skin_color eye_color birth_year gender homeworld

1 Dart~ 202 136 none white yellow 41.9 male Tatooine 
2 Rugo~ 206 NA none green orange NA male Naboo 
3 Taun~ 213 NA none grey black NA female Kamino 
4 Grie~ 216 159 none brown, wh~ green, y~ NA male Kalee 
5 Tion~ 206 80 none grey black NA male Utapau 
# ... with 4 more variables: species , films , vehicles ,
# starships 

#find rows where height is above the average height
starwars %>% filter(height > mean (height, na.rm = TRUE ))

# A tibble: 51 x 13
 name height mass hair_color skin_color eye_color birth_year gender

 1 Dart~ 202 136 none white yellow 41.9 male 
 2 Owen~ 178 120 brown, gr~ light blue 52 male 
 3 Bigg~ 183 84 black light brown 24 male 
 4 Obi-~ 182 77 auburn, w~ fair blue-gray 57 male 
 5 Anak~ 188 84 blond fair blue 41.9 male 
 6 Wilh~ 180 NA auburn, g~ fair blue 64 male 
 7 Chew~ 228 112 brown unknown blue 200 male 
 8 Han ~ 180 80 brown fair brown 29 male 
 9 Jabb~ 175 1358 <NA> green-tan~ orange 600 herma~
10 Jek ~ 180 110 brown fair blue NA male 
# ... with 41 more rows, and 5 more variables: homeworld , species ,
# films , vehicles , starships

Вы можете найти полную документацию по функции filter() здесь .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.