How to Convert Factor to Numeric in R (With Examples)


We can use the following syntax to convert a factor vector to a numeric vector in R:

numeric_vector <- as.numeric(as.character(factor_vector))

We must first convert the factor vector to a character vector, then to a numeric vector. This ensures that the numeric vector contains the actual numeric values instead of the factor levels.

This tutorial provides several examples of how to use this function in practice.

Example 1: Convert a Vector from Factor to Numeric

The following code shows how to convert a factor vector to a numeric vector:

#define factor vector
factor_vector <- factor(c(1, 5, 7, 8))

#convert factor vector to numeric vector
numeric_vector <- as.numeric(as.character(factor_vector))

#view class
class(numeric_vector)

[1] "numeric"

Example 2: Convert a Column from Factor to Numeric

The following code shows how to convert a specific column in a data frame from factor to numeric:

#create data frame
df <- data.frame(a = factor(c(1, 5, 7, 8)),
                 b = c(28, 34, 35, 36))

#convert column 'a' from factor to numeric
df$a <- as.numeric(as.character(df$a))

#view new data frame
df

  a  b
1 1 28
2 5 34
3 7 35
4 8 36

#confirm class of numeric vector
class(df$a)

[1] "numeric"

Example 3: Convert Several Columns from Factor to Numeric

The following code shows how to convert all factor columns in a data frame from factor to numeric:

#create data frame
df <- data.frame(a = factor(c(1, 5, 7, 8)),
                 b = factor(c(2, 3, 4, 5)),
                 c = c('A', 'B', 'C', 'D'),
                 d = c(45, 56, 54, 57))

#display classes of each column
sapply(df, class)

       a           b           c           d 
"factor"    "factor" "character"   "numeric" 

#identify all factor columns
x <- sapply(df, is.factor)

#convert all factor columns to numeric
df[ , x] <- as.data.frame(apply(df[ , x], 2, as.numeric))

#display classes of each column
sapply(df, class)

        a           b           c           d 
"numeric"   "numeric" "character"   "numeric" 

This code made the following changes to the data frame columns:

  • Column a: From factor to numeric
  • Column b: From factor to numeric
  • Column c: Unchanged (since it was a character)
  • Column d: Unchanged (since it was already numeric)

By using the apply() and sapply() functions, we were able to convert only the factor columns to numeric columns and leave all other columns unchanged.

Additional Resources

How to Convert Character to Factor in R
How to Convert Factor to Character in R
How to Convert a Character to a Timestamp in R

Leave a Reply

Your email address will not be published.