[R] extra digits added to data

Jim Holtman jholtman at gmail.com
Wed Oct 12 12:23:42 CEST 2011


what are you going to do with the data?  If just for presentation, then keep as character.  If you are going to compute on the data, then keep as numeric.  Since you are using floating point, FAQ 7.31 reminds you that the data "is kept" as inputted to the best that can be done with 54 bits of precision.  You can always use 'round' or 'sprintf' for output if you want it to 'look' the same.  Read the paper pointed to by FAQ 7.31 for an in depth understanding of what is happening.  The other solution is to find a package tha works with decimal instead of binary; 'bc'?

Sent from my iPad

On Oct 11, 2011, at 11:57, Mark Harrison <harrisonmark1 at gmail.com> wrote:

> Thanks for the quick response.
> 
> Read the FAQ.  If i want to keep the values in R the same as when inputed should i be converting the data to a different type - i.e. Not numeric?
> 
> 
> 
> Sent from my iPhone
> 
> On Oct 11, 2011, at 4:46 AM, Jim Holtman <jholtman at gmail.com> wrote:
> 
>> FAQ 7.31
>> 
>> Sent from my iPad
>> 
>> On Oct 11, 2011, at 1:07, Mark Harrison <harrisonmark1 at gmail.com> wrote:
>> 
>>> I am having a problem with extra digits being added to my data which I think
>>> is a result of how I am converting my data.frame data to xts.
>>> 
>>> I see the same issue in R v2.13.1 and RStudio version 0.94.106.
>>> 
>>> I am loading historical foreign exchange data in via csv files or from a sql
>>> server database.  In both cases there are no extra digits and the original
>>> data looks like the following:
>>> 
>>>      Date   Open   High    Low  Close
>>> 1 2001-01-03 1.5021 1.5094 1.4883 1.4898
>>> 2 2001-01-04 1.4897 1.5037 1.4882 1.5020
>>> 3 2001-01-05 1.5020 1.5074 1.4952 1.5016
>>> 4 2001-01-08 1.5035 1.5104 1.4931 1.4964
>>> 5 2001-01-09 1.4964 1.4978 1.4873 1.4887
>>> 6 2001-01-10 1.4887 1.4943 1.4856 1.4866
>>> 
>>> So for 2001-01-03 the Open value is 1.5021 with only 4 digits after the
>>> decimal place - i.e. .5021.
>>> 
>>> I then proceed to do the following in R to convert the 'british pound' data
>>> above from data.frame to xts:
>>> 
>>> Require(quantmod)
>>> rownames(gbp) <- gbp$Date
>>> head(gbp)
>>> 
>>>           Open   High    Low  Close
>>> 2001-01-03 1.5021 1.5094 1.4883 1.4898
>>> 2001-01-04 1.4897 1.5037 1.4882 1.5020
>>> 2001-01-05 1.5020 1.5074 1.4952 1.5016
>>> 2001-01-08 1.5035 1.5104 1.4931 1.4964
>>> 2001-01-09 1.4964 1.4978 1.4873 1.4887
>>> 2001-01-10 1.4887 1.4943 1.4856 1.4866
>>> 
>>> gbp<- as.xts(gbp[,2:5])
>>> class(gbp)
>>> 
>>> [1] "xts" "zoo"
>>> 
>>> The data at this point looks ok until you look closer or output the data to
>>> excel at which point you see the following for the 'Open' 2001-01-03:
>>> 1.50209999084473
>>> 
>>> It is not just the above 'Open' or the first value but all the data points
>>> contain the extra digits which I think is the original date data and/or row
>>> numbers that are being tacked on.
>>> 
>>> My problem is the extra digits being added or whatever I am doing wrong in R
>>> to cause the extra digits to be added.  I need 1.5021 to be 1.5021 and not
>>> 1.50209999084473.
>>> 
>>> Thanks for the help.
>>> 
>>>  [[alternative HTML version deleted]]
>>> 
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list