How to Use “NOT IN” Operator in R (With Examples)


You can use the following basic syntax to select all elements that are not in a list of values in R:

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

The following examples show how to use this syntax in practice.

Example 1: How to Use “NOT IN” with Vectors

The following code shows how to select all values in a vector in R that are not in a certain list of values:

#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

All values that are not equal to 3 or 4 are shown in the output.

Note that we can use the same syntax to select all elements in a vector that are not in a certain list of characters:

#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"

All values that are not equal to ‘A’ or ‘C’ are shown in the output.

Example 2: How to Use “NOT IN” with Data Frames

The following code shows how to select all rows in a data frame in R in which a certain column is not equal to certain values:

#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

Notice that all rows that do not have an ‘A’ or ‘B’ in the team column are returned.

We can also use similar syntax to select all rows in which a certain column is not equal to certain numeric values:

#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

Notice that all rows that are not equal to 89 or 99 in the points column are returned.

Additional Resources

The following tutorials explain how to perform other common tasks in R:

How to Use %in% Operator in R
How to Subset a Data Frame in R
How to Subset Lists in R

Leave a Reply

Your email address will not be published. Required fields are marked *