Как использовать оператор «НЕ В» в R (с примерами)


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

! (data %in% c(value1, value2, value3, ...))

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

Пример 1: Как использовать «НЕ В» с векторами

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

#define numeric vector
num_data <- c(1, 2, 3, 3, 4, 4, 5, 5, 6)

#display all values in vector not equal to 3 or 4
num_data[ ! (num_data %in% c(3, 4))]

[1] 1 2 5 5 6

В выводе отображаются все значения, не равные 3 или 4.

Обратите внимание, что мы можем использовать тот же синтаксис для выбора всех элементов вектора, которые не входят в определенный список символов:

#define vector of character data
char_data <- c('A', 'A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'D')

#display all elements in vector not equal to 'A', or 'C'
char_data[ ! (char_data %in% c('A', 'C'))]

[1] "B" "B" "D" "D" "D"

Все значения, которые не равны «A» или «C», отображаются в выходных данных.

Пример 2: Как использовать «NOT IN» с фреймами данных

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

#create data frame
df <- data.frame(team=c('A', 'A', 'B', 'B', 'C', 'C', 'D'),
 points=c(77, 81, 89, 83, 99, 92, 97),
 assists=c(19, 22, 29, 15, 32, 39, 14))

#view data frame
df

 team points assists
1 A 77 19
2 A 81 22
3 B 89 29
4 B 83 15
5 C 99 32
6 C 92 39
7 D 97 14

#select all rows where team is not equal to 'A' or 'B'
subset(df, ! (team %in% c('A', 'B')))

 team points assists
5 C 99 32
6 C 92 39
7 D 97 14

Обратите внимание, что возвращаются все строки, не содержащие «A» или «B» в столбце «команда».

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

#create data frame
df <- data.frame(team=c('A', 'A', 'B', 'B', 'C', 'C', 'D'),
 points=c(77, 81, 89, 83, 99, 92, 97),
 assists=c(19, 22, 29, 15, 32, 39, 14))

#view data frame
df

 team points assists
1 A 77 19
2 A 81 22
3 B 89 29
4 B 83 15
5 C 99 32
6 C 92 39
7 D 97 14

#select all rows where team is not equal to 'A' or 'B'
subset(df, ! (points %in% c(89, 99)))

 team points assists
1 A 77 19
2 A 81 22
4 B 83 15
6 C 92 39
7 D 97 14

Обратите внимание, что возвращаются все строки, которые не равны 89 или 99 в столбце точек.

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

Как использовать оператор %in% в R
Как подмножить фрейм данных в R
Как создать подмножество списков в R