R: Convert factors to numeric variables

to_value {sjmisc} | R Documentation

## Convert factors to numeric variables

### Description

This function converts (replaces) factor levels with the related factor level index number, thus the factor is converted to a numeric variable.

### Usage

    to_value(x, ..., start.at = NULL, keep.labels = TRUE,
      use.labels = FALSE)

### Arguments

`x` | A vector or data frame.
`...` | Optional, unquoted names of variables that should be selected for further processing. Required, if `x` is a data frame (and no vector) and only selected variables from `x` should be processed. You may also use functions like `:` or tidyselect's `select_helpers`. See 'Examples' or package-vignette.
`start.at` | Starting index, i.e. the lowest numeric value of the variable's value range. By default, this argument is `NULL`, hence the lowest value of the returned numeric variable corresponds to the lowest factor level (if factor levels are numeric) or to `1` (if factor levels are not numeric).
`keep.labels` | Logical, if `TRUE`, former factor levels will be added as value labels. For numeric factor levels, values labels will be used, if present. See 'Examples' and `set_labels` for more details.
`use.labels` | Logical, if `TRUE` and `x` has numeric value labels, these value labels will be set as numeric values.

### Value

A numeric variable with values ranging either from `start.at` to `start.at` + length of factor levels, or to the corresponding factor levels (if these were numeric). If `x` is a data frame, the complete data frame `x` will be returned, where variables specified in `...` are coerced to numeric; if `...` is not specified, applies to all variables in the data frame.

### Note

This function is kept for backwards-compatibility. It is preferred to use `as_numeric`.

### Examples

    library(sjlabelled)
    data(efc)
    test <- as_label(efc$e42dep)
    table(test)

    table(to_value(test))
    hist(to_value(test, start.at = 0))

    # set lowest value of new variable to "5".
    table(to_value(test, start.at = 5))

    # numeric factor keeps values
    dummy <- factor(c("3", "4", "6"))
    table(to_value(dummy))

    # do not drop unused factor levels
    dummy <- ordered(c(rep("No", 5), rep("Maybe", 3)),
                     levels = c("Yes", "No", "Maybe"))
    to_value(dummy)

    # non-numeric factor is converted to numeric
    # starting at 1
    dummy <- factor(c("D", "F", "H"))
    table(to_value(dummy))

    library(sjlabelled)
    # for numeric factor levels, value labels will be used, if present
    dummy1 <- factor(c("3", "4", "6"))
    dummy1 <- set_labels(dummy1, labels = c("first", "2nd", "3rd"))
    dummy1
    to_value(dummy1)

    # for non-numeric factor levels, these will be used.
    # value labels will be ignored
    dummy2 <- factor(c("D", "F", "H"))
    dummy2 <- set_labels(dummy2, labels = c("first", "2nd", "3rd"))
    dummy2
    to_value(dummy2)

    # easily coerce specific variables in a data frame to numeric
    # and keep other variables, with their class preserved
    data(efc)
    efc$e42dep <- as.factor(efc$e42dep)
    efc$e16sex <- as.factor(efc$e16sex)
    efc$e17age <- as.factor(efc$e17age)

    # convert back "sex" and "age" into numeric
    to_value(efc, e16sex, e17age)

    x <- factor(c("None", "Little", "Some", "Lots"))
    x <- set_labels(x, labels = c("0.5", "1.3", "1.8", ".2"))
    x
    to_value(x)
    to_value(x, use.labels = TRUE)
    to_value(x, use.labels = TRUE, keep.labels = FALSE)

[Package sjmisc version 2.7.5 Index]