R Basic

R type.convert() Function: Complete Guide

The type.convert() is a built-in R function that intelligently converts a vector, factor, or data frame column into the most appropriate data type (integer, numeric, logical, complex, or factor) based on its content.

Please note that we don’t need to specify which data type to convert to; this function automatically determines, which is the main beauty.

If you are working with an external dataset, you might come across data that has the incorrect data type, but for data analysis, you have to parse it to the appropriate data type, and that’s where this type of method is really helpful.

Syntax

type.convert(obj, ...)

Parameters

Name Value
obj An input object that will be converted to a vector, factor, or data frame.
na.strings (optional) Character vector specifying values to treat NA.(e.g., “NA”, “”)
as.is (logical) If TRUE, that means character vectors are not converted to factors.

If FALSE, character vectors may become factors.

dec (character) It is a decimal separator. By default, “.”. Use dec = “,” for European style.
numerals (string) Controls warning when converting numeric strings.

Return value

  1. If an input is a character vector, it returns a logical, numeric, or factor.
  2. If an input is a factor, it returns a numeric, character, or remains a factor.
  3. NA values will be introduced if na.strings is specified.

Basic conversion

Let’s define a vector with numeric values represented as a character vector.

Let’s try to convert that character vector into a numeric vector intelligently.

vec <- c("11", "21", "19")

print(class(vec)) 
# Output: [1] "character"

result <- type.convert(vec, as.is = TRUE)

print(result) 
# Output: [1] 11 21 19

print(class(result)) 
# Output: [1] "numeric"

In the above code, “11“, “21”, and “19” are valid numeric values wrapped in a character vector. That is why the type.convert() function easily converts them into a numeric vector.

If you don’t pass as.is argument, you will see a warning like this:

Warning message:

In type.convert.default(vec) :
  'as.is' should be specified by the caller; using TRUE

To fix this warning, you can pass as.is = TRUE argument to ensure that the character vector does not convert string values into factors, and we need numeric values.

Vector with mixed types

Using as.is = FALSE, you can convert a mixed-type vector to a factor. If you pass as.is = TRUE, a mixed-type vector does not convert to a factor.

mixed_vec <- c(11, "Eleven", TRUE)

print(class(mixed_vec)) 
# Output: [1] "character"

result <- type.convert(mixed_vec, as.is = FALSE)

print(result)
# Output: [1] 11 Eleven TRUE
# Levels: 11 Eleven TRUE

print(class(result)) 
# Output: [1] "factor"

The above code shows the output in a factor.

What if you pass as.is = TRUE, let’s find out.

mixed_vec <- c(11, "Eleven", TRUE)

print(class(mixed_vec)) 
# Output: [1] "character"

result <- type.convert(mixed_vec, as.is = TRUE)

print(result)
# Output: [1] 11 Eleven TRUE

print(class(result)) 
# Output: [1] "character"

The above conversion happened from character to character.

Handling NA values

To handle NA values, you must pass the “na.strings = NA” argument while calling the function.

vec_na <- c(11, NA, NA)

print(class(vec_na))
# Output: [1] "numeric"

result <- type.convert(vec_na, na.strings = "NA", as.is = TRUE)

print(result)
# Output: [1] 11 NA NA

print(class(result))
# Output: [1] "integer"

Using the “dec” argument

If you pass dec = “,”, it tells R that commas should be interpreted as decimal places.

vec_dec <- c("1,1", "1,9", "2,1")

print(class(vec_dec))
# Output: [1] "character"

result <- type.convert(vec_dec, as.is = TRUE, dec = ",")

print(result)
# Output: [1] 1.1 1.9 2.1

print(class(result))
# Output: [1] "numeric"

Factor to integer conversion

What if your input is a factor representing valid integer values? Well, type.convert() function returns a numeric vector containing integer values.

fac <- factor(c("10", "20", "30"))

print(class(fac))
# Output: [1] "factor"

result <- type.convert(fac, as.is = FALSE)

print(result)
# Output: [1] 10 20 30

print(class(result))
# Output: [1] "integer"

Logical conversion

If the input vector is a character vector representing logical vectors (TRUE or FALSE), the function will return the logical vector.

fac <- factor(c("TRUE", "FALSE", "TRUE"))

print(class(fac))
# Output: [1] "factor"

result <- type.convert(fac, as.is = FALSE)

print(result)
# Output: [1] TRUE FALSE TRUE

print(class(result))
# Output: [1] "logical"

That’s all!

Recent Posts

How to Check If File and Folder Already Exists in R

Whether you are reading or writing files via programs in the file system, it is…

2 days ago

How to Check Data type of a Variable in R

When it comes to checking the data type of a variable, it depends on what…

3 days ago

Mastering grepl() Function in R

The grepl() function (stands for "grep logical") in R searches for patterns within each element…

4 days ago

zip(), unzip() and tar(), untar() Functions in R

The zip() function creates a new zip archive file. You must ensure that the zip tool…

5 days ago

How to Create Directory and File If It doesn’t Exist in R

When working with file systems, checking the directory or file existence is always better before…

6 days ago

How to Create a Grouped Boxplot in R

To create a grouped boxplot in R, we can use the ggplot2 library's aes() and…

1 week ago