Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

as.numeric() removes decimal places in R, how to change?

Tags:

r

I have what I hope is a simple question about as.numeric(). I have a bunch of data with numbers written as characters. I want them to be numeric, but as.numeric() takes away decimal spots. For example:

y <- as.character("0.912345678")
as.numeric(y)
0.9123457

Thank you :)

like image 834
CHN Avatar asked Apr 26 '15 16:04

CHN


People also ask

How do I change a decimal to numeric in R?

To convert a float or double to integer in R, use the as. integer() function. The as. integer() is an inbuilt function used for an object of class ursaRaster that truncates the decimal part of image values and then converts to type integer.


2 Answers

R is basically following some basic configuration settings for printing the number of required digits. You can change this with the digits option as follows:

> options(digits=9)
> y <- as.character("0.912345678")
> as.numeric(y)
[1] 0.912345678

Small EDIT for clarity: digits corresponds to the number of digits to display in total, and not just the number of digits after the comma.

For example,

> options(digits=9)
> y <- as.character("10.123456789")
> as.numeric(y)
[1] 10.1234568

In your example above the leading zero before the comma is not counted, this is why 9 digits was enough to display the complete number.

like image 116
Jellen Vermeir Avatar answered Oct 08 '22 08:10

Jellen Vermeir


What's going on is that R is only displaying a fixed number of digits.

This R-help post explains what's going on. To quote Peter Dalgaard:

"There's a difference between an object and the display of an object."

With your example,

y2 = as.numeric(y)
print(y2)
# [1] 0.9123457 

but subtract 0.9 to see

y2 - 0.9
# [1] 0.01234568

Updated based upon the comment by @Khashaa To change your display use

options(digits = 9)
y2
# [1] 0.912345678
like image 45
Richard Erickson Avatar answered Oct 08 '22 09:10

Richard Erickson