R: Fast Removal of Unused Factor Levels

fdroplevels {collapse} | R Documentation

## Fast Removal of Unused Factor Levels

### Description

A substantially faster replacement for `droplevels`.

### Usage

    fdroplevels(x, ...)

    ## S3 method for class 'factor'
    fdroplevels(x, ...)

    ## S3 method for class 'data.frame'
    fdroplevels(x, ...)

### Arguments

`x` | a factor, or data frame / list containing one or more factors.
`...` | not used.

### Details

`droplevels` passes a factor from which levels are to be dropped to `factor`, which first calls `unique` and then `match` to drop unused levels. Both functions internally use a hash table, which is highly inefficient. `fdroplevels` does not require mapping values at all, but uses a super fast boolean vector method to determine which levels are unused and remove those levels. In addition, if no unused levels are found, `x` is simply returned. Any missing values found in `x` are efficiently skipped in the process of checking and replacing levels. All other attributes of `x` are preserved.

### Value

`x` will any unused factor levels removed.

### Note

If `x` is malformed i.e. has too few levels, this function can cause a segmentation fault, thus only use with ordinary / proper factors.

### See Also

`qF`, `funique`, Fast Grouping and Ordering, Collapse Overview

### Examples

    f <- iris$Species[1:100]
    fdroplevels(f)
    identical(fdroplevels(f), droplevels(f))

    fNA <- na_insert(f)
    fdroplevels(fNA)
    identical(fdroplevels(fNA), droplevels(fNA))

    identical(fdroplevels(ss(iris, 1:100)), droplevels(ss(iris, 1:100)))

[Package collapse version 1.7.6 Index]