This function converts (replaces) factor levels with the related factor level index number, thus the factor is converted to a numeric variable.
as_numeric(x, ...)
to_numeric(x, ...)
# S3 method for data.frame
as_numeric(x, ..., start.at = NULL, keep.labels = TRUE, use.labels = FALSE)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'.
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).
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.
Logical, if TRUE and x has numeric value labels,
the values defined in the labels (right-hand side of labels, for instance
labels = c(null = 0, one = 1)) will be set as numeric values (instead
of consecutive factor level numbers). See 'Examples'.
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.
data(efc)
test <- as_label(efc$e42dep)
table(test)
#> test
#> <dbl>
#> 1
table(as_numeric(test))
#>
#> 1
#> 1
hist(as_numeric(test, start.at = 0))
# set lowest value of new variable to "5".
table(as_numeric(test, start.at = 5))
#>
#> 5
#> 1
# numeric factor keeps values
dummy <- factor(c("3", "4", "6"))
table(as_numeric(dummy))
#>
#> 3 4 6
#> 1 1 1
# do not drop unused factor levels
dummy <- ordered(c(rep("No", 5), rep("Maybe", 3)),
levels = c("Yes", "No", "Maybe"))
as_numeric(dummy)
#> [1] 2 2 2 2 2 3 3 3
#> attr(,"labels")
#> Yes No Maybe
#> 1 2 3
# non-numeric factor is converted to numeric
# starting at 1
dummy <- factor(c("D", "F", "H"))
table(as_numeric(dummy))
#>
#> 1 2 3
#> 1 1 1
# 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
#> [1] 3 4 6
#> attr(,"labels")
#> first 2nd 3rd
#> 3 4 6
#> Levels: 3 4 6
as_numeric(dummy1)
#> [1] 3 4 6
#> attr(,"labels")
#> first 2nd 3rd
#> 3 4 6
# 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
#> [1] D F H
#> attr(,"labels")
#> first 2nd 3rd
#> D F H
#> Levels: D F H
as_numeric(dummy2)
#> [1] 1 2 3
#> attr(,"labels")
#> D F H
#> 1 2 3
# 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
head(as_numeric(efc, e16sex, e17age))
#> c12hour e15relat e16sex e17age e42dep c82cop1 c83cop2 c84cop3 c85cop4 c86cop5
#> 1 16 2 2 83 3 3 2 2 2 1
#> 2 148 2 2 88 3 3 3 3 3 4
#> 3 70 1 2 82 3 2 2 1 4 1
#> 4 168 1 2 67 4 4 1 3 1 1
#> 5 168 2 2 84 4 3 2 1 2 2
#> 6 16 2 2 85 4 2 2 3 3 3
#> c87cop6 c88cop7 c89cop8 c90cop9 c160age c161sex c172code c175empl barthtot
#> 1 1 2 3 3 56 2 2 1 75
#> 2 1 3 2 2 54 2 2 1 75
#> 3 1 1 4 3 80 1 1 0 35
#> 4 1 1 2 4 69 1 2 0 0
#> 5 2 1 4 4 47 2 2 0 25
#> 6 2 2 1 1 56 1 2 1 60
#> neg_c_7 pos_v_4 quol_5 resttotn tot_sc_e n4pstu nur_pst
#> 1 12 12 14 0 4 0 NA
#> 2 20 11 10 4 0 0 NA
#> 3 11 13 7 0 1 2 2
#> 4 10 15 12 2 0 3 3
#> 5 12 15 19 2 1 2 2
#> 6 19 9 8 1 3 2 2
x <- factor(c("None", "Little", "Some", "Lots"))
x <- set_labels(x,
labels = c(None = "0.5", Little = "1.3", Some = "1.8", Lots = ".2")
)
x
#> [1] None Little Some Lots
#> attr(,"labels")
#> Lots None Little Some
#> 0.2 0.5 1.3 1.8
#> Levels: Little Lots None Some
as_numeric(x)
#> [1] 3 1 4 2
#> attr(,"labels")
#> Little Lots None Some
#> 1 2 3 4
as_numeric(x, use.labels = TRUE)
#> [1] 1.3 0.2 1.8 0.5
#> attr(,"labels")
#> Little Lots None Some
#> 0.2 0.5 1.3 1.8
as_numeric(x, use.labels = TRUE, keep.labels = FALSE)
#> [1] 1.3 0.2 1.8 0.5