【发布时间】:2018-10-31 04:09:45
【问题描述】:
我有一个数据框,其中有一个 id 字段,其值为以下两个:
587739706883375310
587739706883375408
问题是,当我要求 R 显示这两个数字时,我得到的输出如下:
587739706883375360
587739706883375360
这不是我的ID 字段的真实值,我该如何解决?
供您参考:我已执行 options(scipen = 999) 到 R 不会将我的数字转换为科学计数法。
这个问题也发生在 R 控制台中,如果我输入这些示例编号,我也会得到与上图相同的打印结果。
编辑:有人问
dput(yourdata$id)
我这样做了,结果是:
c(587739706883375360, 587739706883375360, 587739706883375488, 587739706883506560, 587739706883637632, 587739706883637632, 587739706883703040)
对比一下,csv文件中的原始数据是:
587739706883375310,587739706883375408,587739706883375450,587739706883506509,587739706883637600,587739706883637629,587739706883703070
我还用这些数字之一做了以下测试:
> 587739706883375408
[1] 587739706883375360
> as.double(587739706883375408)
[1] 587739706883375360
> class(as.double(587739706883375408))
[1] "numeric"
> is.double(as.double(587739706883375408))
[1] TRUE
【问题讨论】:
-
请输入(yourdata$id)。
-
使用大整数公式或(可能更合适)将列作为字符列读取。除非您使用这些数字进行数学运算,否则最好将它们视为字符。
-
这是计算机试图模拟数字的常见问题。 R 默认情况下(像许多其他语言一样)以双精度保存数字。这意味着它只能保存数字的前 16 位 - 请参见此处:en.wikipedia.org/wiki/Quadruple-precision_floating-point_format
标签: r variables dataframe output precision