You can use one of the following methods to subset a data frame by factor levels in R:
Method 1: Subset by One Factor Level
#subset rows where team is equal to 'B' df_sub <- df[df$team == 'B', ]
Method 2: Subset by Multiple Factor Levels
#subset rows where team is equal to 'A' or 'C'
df_sub <- df[df$team %in% c('A', 'C'), ]
The following examples show how to use each of these methods in practice with the following data frame in R:
#create data frame
df <- data.frame(team=factor(c('A', 'A', 'B', 'B', 'B', 'C')),
points=c(22, 35, 19, 15, 29, 23))
#view data frame
df
team points
1 A 22
2 A 35
3 B 19
4 B 15
5 B 29
6 C 23
Method 1: Subset by One Factor Level
The following code shows how to create a new data frame that subsets by the rows where the value in the team column is equal to ‘B’:
#subset rows where team is equal to 'B' df_sub <- df[df$team == 'B', ] #view updated data frame df_sub team points 3 B 19 4 B 15 5 B 29
Notice that the new data frame only contains rows where the value in the team column is equal to ‘B’.
Example 2: Subset by Multiple Factor Levels
The following code shows how to create a new data frame that subsets by the rows where the value in the team column is equal to ‘A’ or ‘C’:
#subset rows where team is equal to 'A' or 'C' df_sub <- df[df$team %in% c('A', 'C'), ] #view updated data frame df_sub team points 1 A 22 2 A 35 6 C 23
Notice that the new data frame only contains rows where the value in the team column is equal to ‘A’ or ‘C’.
Using this syntax, you can include as many factor levels as you’d like in the vector following the %in% operator to subset by even more factor levels.
Related: How to Use %in% Operator in R (With Examples)
Additional Resources
The following tutorials explain how to perform other common tasks in R:
How to Convert Factor to Numeric in R
How to Convert Factor to Character in R
How to Reorder Factor Levels in R