在我的数据中,我有一个包含长值的列,如下面的数字:1469533935218
当我将其转换为数字时,它会丢失它的信息并变成以下数字:1.469534e+12
答案 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
?