dplyr: как использовать фильтр «не в»


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

df %>%
 filter (!col_name %in% c('value1', 'value2', 'value3', ...))

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1. Фильтрация строк, не содержащих значения в одном столбце

Предположим, у нас есть следующий фрейм данных в R:

#create data frame
df <- data.frame(team=c('A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'),
 position=c('G', 'G', 'F', 'G', 'F', 'C', 'C', 'C'),
 points=c(12, 14, 19, 24, 36, 41, 18, 29))

#view data frame
df

 team position points
1 A G 12
2 A G 14
3 B F 19
4 B G 24
5 C F 36
6 C C 41
7 D C 18
8 D C 29

Следующий синтаксис показывает, как фильтровать строки, в которых название команды не равно «A» или «B»:

#filter for rows where team name is not 'A' or 'B'
df %>%
 filter (!team %in% c('A', 'B'))

 team position points
1 C F 36
2 C C 41
3 D C 18
4 D C 29

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

Предположим, у нас есть следующий фрейм данных в R:

#create data frame
df <- data.frame(team=c('A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'),
 position=c('G', 'G', 'F', 'G', 'F', 'C', 'C', 'C'),
 points=c(12, 14, 19, 24, 36, 41, 18, 29))

#view data frame
df

 team position points
1 A G 12
2 A G 14
3 B F 19
4 B G 24
5 C F 36
6 C C 41
7 D C 18
8 D C 29

Следующий синтаксис показывает, как отфильтровать строки, в которых название команды не равно «A» и где позиция не равна «C»:

#filter for rows where team name is not 'A' and position is not 'C'
df %>%
 filter (!team %in% c('A') & !position %in% c('C'))

 team position points
1 B F 19
2 B G 24
3 C F 36

Дополнительные ресурсы

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

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