Learn R Programming

sjmisc (version 2.0.1)

rec: Recode variables

Description

Recodes the categories / values of a variable x into new category values.

Usage

rec(x, recodes, as.fac = FALSE, var.label = NULL, val.labels = NULL)
rec(x, as.fac = FALSE, var.label = NULL, val.labels = NULL) <- value

Arguments

x
Numeric, charactor or factor variable that should be recoded; or a data.frame or list of variables.
recodes
String with recode pairs of old and new values. See 'Details' for examples. rec_pattern is a convenient function to create recode strings for grouping variables.
as.fac
Logical, if TRUE, recoded variable is returned as factor. Default is FALSE, thus a numeric variable is returned.
var.label
Optional string, to set variable label attribute for the returned variable (see set_label). If NULL (default), variable label attribute of x will be used (if present). If empty, variable label attributes will be removed.
val.labels
Optional character vector, to set value label attributes of recoded variable (see set_labels). If NULL (default), no value labels will be set.
value
See recodes.

Value

A numeric variable (or a factor, if as.fac = TRUE or if x was a character vector) with recoded category values, or a data frame or list-object with recoded categories for all variables.

Details

The recodes string has following syntax:

See Also

set_na for setting NA values, replace_na to replace NA's with specific value, recode_to for re-shifting value ranges and ref_lvl to change the reference level of (numeric) factors.

Examples

Run this code
data(efc)
table(efc$e42dep, useNA = "always")

# replace NA with 5
table(rec(efc$e42dep, "1=1;2=2;3=3;4=4;NA=5"), useNA = "always")

# recode 1 to 2 into 1 and 3 to 4 into 2
table(rec(efc$e42dep, "1,2=1; 3,4=2"), useNA = "always")

# or:
# rec(efc$e42dep) <- "1,2=1; 3,4=2"
# table(efc$e42dep, useNA = "always")

# keep value labels. variable label is automatically preserved
library(dplyr)
efc %>%
  select(e42dep) %>%
  rec(recodes = "1,2=1; 3,4=2",
      val.labels = c("low dependency", "high dependency")) %>%
  str()

# recode 1 to 3 into 4 into 2
table(rec(efc$e42dep, "min:3=1; 4=2"), useNA = "always")

# recode 2 to 1 and all others into 2
table(rec(efc$e42dep, "2=1; else=2"), useNA = "always")

# reverse value order
table(rec(efc$e42dep, "rev"), useNA = "always")

# recode only selected values, copy remaining
table(efc$e15relat)
table(rec(efc$e15relat, "1,2,4=1; else=copy"))

# recode variables with same categorie in a data frame
head(efc[, 6:9])
head(rec(efc[, 6:9], "1=10;2=20;3=30;4=40"))

# recode list of variables. create dummy-list of
# variables with same value-range
dummy <- list(efc$c82cop1, efc$c83cop2, efc$c84cop3)
# show original distribution
lapply(dummy, table, useNA = "always")
# show recodes
lapply(rec(dummy, "1,2=1; NA=9; else=copy"), table, useNA = "always")

# recode character vector
dummy <- c("M", "F", "F", "X")
rec(dummy, "M=Male; F=Female; X=Refused")

# recode non-numeric factors
data(iris)
rec(iris$Species, "setosa=huhu; else=copy")

# preserve tagged NAs
library(haven)
x <- labelled(c(1:3, tagged_na("a", "c", "z"), 4:1),
              c("Agreement" = 1, "Disagreement" = 4, "First" = tagged_na("c"),
                "Refused" = tagged_na("a"), "Not home" = tagged_na("z")))
# get current value labels
x
# recode 2 into 5; Values of tagged NAs are preserved
rec(x, "2=5;else=copy")
na_tag(rec(x, "2=5;else=copy"))

Run the code above in your browser using DataLab