step_other {recipes} | R Documentation

## Collapse Some Categorical Levels

### Description

`step_other` creates a specification of a recipe step that will potentially pool infrequently occurring values into an "other" category.

### Usage

    step_other(recipe, ..., role = NA, trained = FALSE, threshold = 0.05,
      other = "other", objects = NULL, skip = FALSE,
      id = rand_id("other"))

    ## S3 method for class 'step_other'
    tidy(x, ...)

### Arguments

`recipe` | A recipe object. The step will be added to the sequence of operations for this recipe.
`...` | One or more selector functions to choose which variables that will potentially be reduced. See `selections()` for more details. For the `tidy` method, these are not currently used.
`role` | Not used by this step since no new variables are created.
`trained` | A logical to indicate if the quantities for preprocessing have been estimated.
`threshold` | A single numeric value between 0 (inclusive) and 1 for pooling. Factor levels whose rate of occurrence in the training set are below `threshold` will be "othered".
`other` | A single character value for the "other" category.
`objects` | A list of objects that contain the information to pool infrequent levels that is determined by `prep.recipe()`.
`skip` | A logical. Should the step be skipped when the recipe is baked by `bake.recipe()`? While all operations are baked when `prep.recipe()` is run, some operations may not be able to be conducted on new data (e.g. processing the outcome variable(s)). Care should be taken when using `skip = TRUE` as it may affect the computations for subsequent operations
`id` | A character string that is unique to this step to identify it.
`x` | A `step_other` object.

### Details

The overall proportion of the categories are computed. The "other" category is used in place of any categorical levels whose individual proportion in the training set is less than `threshold`.

If no pooling is done the data are unmodified (although character data may be changed to factors based on the value of `strings_as_factors` in `prep.recipe()`). Otherwise, a factor is always returned with different factor levels.

If `threshold` is less than the largest category proportion, all levels except for the most frequent are collapsed to the `other` level.

If the retained categories include the value of `other`, an error is thrown. If `other` is in the list of discarded levels, no error occurs.

When data to be processed contains novel levels (i.e., not contained in the training set), the other category is assigned.

### Value

An updated version of `recipe` with the new step added to the sequence of existing steps (if any). For the `tidy` method, a tibble with columns `terms` (the columns that will be affected) and `retained` (the factor levels that were not pulled into "other")

### See Also

`step_factor2string()`, `step_string2factor()`, `dummy_names()`, `step_regex()`, `step_count()`, `step_ordinalscore()`, `step_unorder()`, `step_novel()`

### Examples

    data(okc)

    set.seed(19)
    in_train <- sample(1:nrow(okc), size = 30000)

    okc_tr <- okc[ in_train,]
    okc_te <- okc[-in_train,]

    rec <- recipe(~ diet + location, data = okc_tr)

    rec <- rec %>%
      step_other(diet, location, threshold = .1, other = "other values")
    rec <- prep(rec, training = okc_tr)

    collapsed <- bake(rec, okc_te)
    table(okc_te$diet, collapsed$diet, useNA = "always")

    tidy(rec, number = 1)

    # novel levels are also "othered"
    tahiti <- okc[1,]
    tahiti$location <- "a magical place"
    bake(rec, tahiti)

[Package recipes version 0.1.5 Index]