20

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 :)

CHN
  • 387
  • 1
  • 2
  • 7
  • 10
    options(digits = 9) – Khashaa Apr 26 '15 at 16:24
  • 3
    I'm sure this is a duplicate but I'm too lazy to find a suitable question to link it to right now. – Dason Apr 26 '15 at 16:53
  • @Dason possibly this [here](http://stackoverflow.com/questions/2287616/controlling-digits-in-r) or [here](http://stackoverflow.com/questions/11568385/why-as-numeric-function-in-r-doesnt-work-properly)? I'm not sure the answers are similar enough so I didn't flag the question. – Richard Erickson Apr 26 '15 at 17:01

2 Answers2

29

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.

Jellen Vermeir
  • 1,720
  • 10
  • 10
7

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
Cyrille
  • 3,427
  • 1
  • 30
  • 32
Richard Erickson
  • 2,568
  • 8
  • 26
  • 39