R, like all programming languages, has its quirks. One of the more frustrating ones is the way it acts when trying to convert a factor into a numeric variable.
Let’s start with a vector of numbers that have been mistakenly loaded as characters.
chars <- c("12","13","14","12","11","13","12") chars typeof(chars)
Here is the output
Now, let’s convert this vector to a numeric vector using the function as.numeric()
nums <- as.numeric(chars) nums typeof(nums)
And here is the output
As you can see it works fine.
But now let’s try it with a factor
fac <- factor(c("12","13","14","12","11","13","12")) fac typeof(fac)
Here is the output.
Now look what happens when I try the as.numeric() function
nums <- as.numeric(fac) nums typeof(nums)
Check out the results
While is says the type is a double, clearly the numbers are not correct.
How to fix it?
Well, the secret is that first you need to convert the factor into a character, then into a numeric.
nums <- as.numeric(as.character(fac)) nums typeof(nums)
Now check out the results
Now we have the correct numbers. Just keep this little trick in mind. It has caused me some undue frustration in past.