R: Drop Unused Levels from Factors

droplevels {base} | R Documentation

## Drop Unused Levels from Factors

### Description

The function `droplevels` is used to drop unused levels from a `factor` or, more commonly, from factors in a data frame.

### Usage

    ## S3 method for class 'factor'
    droplevels(x, exclude = if(anyNA(levels(x))) NULL else NA, ...)
    ## S3 method for class 'data.frame'
    droplevels(x, except, exclude, ...)

### Arguments

`x` | an object from which to drop unused factor levels.
`exclude` | passed to `factor()`; factor levels which should be excluded from the result even if present. Note that this was implicitly `NA` in R <= 3.3.1 which did drop `NA` levels even when present in `x`, contrary to the documentation. The current default is compatible with `x[ , drop=TRUE]`.
`...` | further arguments passed to methods
`except` | indices of columns from which not to drop levels

### Details

The method for class `"factor"` is currently equivalent to `factor(x, exclude=exclude)`. For the data frame method, you should rarely specify `exclude` “globally” for all factor columns; rather the default uses the same factor-specific `exclude` as the factor method itself.

The `except` argument follow the usual indexing rules.

### Value

`droplevels` returns an object of the same class as `x`

### Note

This function was introduced in R 2.12.0. It is primarily intended for cases where one or more factors in a data frame contains only elements from a reduced level set after subsetting. (Notice that subsetting does not in general drop unused levels). By default, levels are dropped from all factors in a data frame, but the `except` argument allows you to specify columns for which this is not wanted.

### See Also

`subset` for subsetting data frames. `factor` for definition of factors. `drop` for dropping array dimensions. `drop1` for dropping terms from a model. `[.factor` for subsetting of factors.

### Examples

    aq <- transform(airquality, Month = factor(Month, labels = month.abb[5:9]))
    aq <- subset(aq, Month != "Jul")
    table(           aq $Month)
    table(droplevels(aq)$Month)

[Package base version 3.5.1 Index]