Как отфильтровать строки, содержащие определенную строку, с помощью dplyr


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

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

#create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
 points = c(12, 15, 19, 22, 32),
 rebounds = c(5, 7, 7, 12, 11))

#view data frame
df

 player points rebounds
1 P Guard 12 5
2 S Guard 15 7
3 S Forward 19 7
4 P Forward 22 12
5 Center 32 11

Пример 1. Фильтрация строк, содержащих определенную строку

Следующий код показывает, как фильтровать строки, содержащие определенную строку:

#load dplyr package
library(dplyr)

#filter rows that contain the string 'Guard' in the player column
df %>% filter ( grepl('Guard', player))

 player points rebounds
1 P Guard 12 5
2 S Guard 15 7

Связанный: Сравнение grep() и grepl() в R: в чем разница?

Пример 2. Фильтрация строк, содержащих хотя бы одну строку

В следующем коде показано, как отфильтровать строки, содержащие «Страж» или «Вперед» в столбце игрока:

#filter rows that contain 'Guard' or 'Forward' in the player column
df %>% filter ( grepl('Guard|Forward', player))

 player points rebounds
1 P Guard 12 5
2 S Guard 15 7
3 S Forward 19 7
4 P Forward 22 12

В следующем коде показано, как отфильтровать строки, содержащие «P» или «Центр» в столбце проигрывателя:

#filter rows that contain 'P' or 'Center' in the player column
df %>% filter ( grepl('P|Center', player))

 player points rebounds
1 P Guard 12 5
2 P Forward 22 12
3 Center 32 11

Пример 3. Отфильтровать строки, содержащие определенную строку

В следующем коде показано, как отфильтровать (т.е. удалить) строки, содержащие «Guard» в столбце player:

#filter out rows that contain 'Guard' in the player column
df %>% filter (! grepl('Guard', player))

 player points rebounds
1 S Forward 19 7
2 P Forward 22 12
3 Center 32 11

Следующий код показывает, как отфильтровать (т. е. удалить) строки, содержащие «Страж» или «Центр» в столбце игрока:

#filter out rows that contain 'Guard' or 'Center' in the player column
df %>% filter (! grepl('Guard|Center', player))

 player points rebounds
1 S Forward 19 7
2 P Forward 22 12

Вы можете найти больше руководств по R здесь .