如何将数字转换为数字而不丢失信息R.

时间:2016-08-17 11:15:59

标签: r

在我的数据中,我有一个包含长值的列,如下面的数字:1469533935218 当我将其转换为数字时,它会丢失它的信息并变成以下数字:1.469534e+12

2 个答案:

答案 0 :(得分:0)

如果我们需要读取包含大整数列的数据集,请在使用bit64之前加载fread

library(bit64)
library(data.table)
dt1 <- fread("yourfile.csv")

或使用可重现的示例

dt2 <- fread("
      1469533935218,1469533935219
      14695339352223,1469533935323
   ")
dt2
#              V1            V2
#1:  1469533935218 1469533935219
#2: 14695339352223 1469533935323

答案 1 :(得分:0)

将数据转换为数字时,您没有丢失信息。见options("digits")。这只是一个印刷问题。尝试设置options(digits = 20),然后在控制台中输入1469533935218

当你在控制台中输入1469533935218L时(后缀L告诉你想要一个integer而不是double),你得到:

[1] 1.469534e+12
Warning message:
non-integer value 1469533935218L qualified with L; using numeric value

因为这样的整数在32位模式下无法表示。 ?integer的“详细信息”部分提供了:

 Integer vectors exist so that data can be passed to C or Fortran
 code which expects them, and so that (small) integer data can be
 represented exactly and compactly.

 Note that current implementations of R use 32-bit integers for
 integer vectors, so the range of representable integers is
 restricted to about +/-2*10^9: ‘double’s can hold much larger
 integers exactly.

最后一句也告诉你没有准确性丢失。

如果你想把1469533935218作为一个整数,你需要@ akrun的建议使用64位表示,只要你在64位机器上使用64位R。但我的感觉是没有必要这样做。

您还需要牢记存储成本。如果将数据保留为double,则每个数字仍为32位;如果将数据保持为64位整数,则会使内存使用量翻倍。实际上,如果稍后使用这些数字执行浮点计算,则需要double模式。那么为什么不使用double