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