droplevels in R with examples, To remove unneeded factor levels, use R’s droplevels() function.
This function comes in handy when we need to get rid of factor levels that are no longer in use as a result of subsetting a vector or a data frame.
The syntax for this function is as follows
where x is an object from which unused factor levels should be removed.
This article shows you how to utilize this function in practice with a couple of examples.
Example 1: Drop Unused Factor Levels in a Vector
Assume we have a data vector with seven-factor levels. Let’s say we create a new data vector using only five of the original seven-factor levels.
define data on a seven-factor scale
data <- factor(c(1, 2, 3, 4, 5,6,7))
original data minus 4th and 5th-factor levels = new data
new <- data[-c(4, 5)]
Now we can view the new data
new  1 2 3 6 7 Levels: 1 2 3 4 5 6 7
Despite the fact that the new data only has five factors, we can see that the original seven-factor levels are still present.
We may use the droplevels() function to remove these unneeded factor levels.
remove any levels of factors that are no longer in use.
new <- droplevels(new)
Let’s view the data
new  1 2 3 6 7 Levels: 1 2 3 6 7
There are now only five-factor levels in the new data.
Example 2: Unused Factor Levels in a Data Frame Should Be Removed
Assume we’re working with a data frame in which one of the variables is a five-level factor.
Let’s say we create a new data frame that excludes two of these factor levels.
Let’s create a data frame
df <- data.frame(region=factor(c('P1', 'P2', 'P3', 'P4', 'P5')), sales = c(103, 106, 202, 257, 324)) df region sales 1 P1 103 2 P2 106 3 P3 202 4 P4 257 5 P5 324
Now we can define a new data frame
newdf <- subset(df, sales < 225)
view new data frame
newdf region sales 1 P1 103 2 P2 106 3 P3 202
Let’s check the levels of the region variable.
levels(newdf$region)  "P1" "P2" "P3" "P4" "P5"
The original five-factor levels are still there in the new data frame, despite the fact that the region column only has three factors.
If we tried to make any graphs with this data, we’d run into some issues.
The droplevels() function can be used to eliminate the unnecessary factor levels from the region variable:
Remove any unused factor levels.
newdf$region <- droplevels(newdf$region)
Let’s check now levels of the region variable.
levels(newdf$region)  "P1" "P2" "P3"
Hurray! Done for the day.