在我的数据中,我有一列包含类似以下数字的长整数值:1469533935218
当我将其转换为数值时,它将丢失它的信息并成为如下数字: 1.469534e+12
如何将数字转换为数字而不丢失信息R
回答
当您将其转换为数字时,您没有丢失信息。见options("digits")
。这只是一个印刷问题。尝试设置options(digits = 20)
,然后在控制台中键入1469533935218
。
当你在控制台输入1469533935218L
(后缀L
告诉R您想要一个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
为整数,则需要@用64位表示akrun的建议,只要你是一个64位机采用了64位的河上,但我的感觉是没有必要这样做。
您还需要记住存储成本。如果保留数据为double
,则每个数字仍为32位;如果将数据保存为64位整数,则会增加内存使用量。事实上,如果您稍后使用这些数字执行浮点计算,则需要在double
模式下使用它们。那么为什么不使用double
?
如果我们需要阅读与具有大整数列的数据集,使用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
您不需要为'fread'调用'library(bit64)'来正确读取它(默认情况下是这样),但它可能更适合打印 –
。从文档:'“integer64”(默认)读取检测为包含整数大于2^31的列为类型bit64 :: integer64。' –
@docendodiscimus我有一个大的事务数据集,我用'fread'读取了某个时间, ID是非常长的整数。我认为它会正确拾取,但是当我检查模糊时,出现了一些问题。所以,我用'bit64'再次读了它,并得到了解决。 – akrun
- 1. 将数组转换为字符串并返回,而不会丢失信息
- 2. 将UTF-8字符串转换为字母数字字符串,而不会丢失信息
- 3. C++将字符串转换为float/double而不丢失数据
- 4. 将ARGB转换为RGB而不丢失信息
- 5. 如何将wchar_t *转换为char *而不会丢失数据?
- 6. R - 将一列因子转换为二进制字符而不会丢失信息
- 7. 将长整数转换为整数而不丢失原始值
- 8. 将html表转换为字典而不会丢失结构
- 9. Objective-C:将整个double值转换为字符串而不丢失数据
- 10. 如何将字数转换为数字
- 11. 最小化/转换字符串而不丢失数据
- 12. 转换 “数字” 串入一些Python号码类型不丢失信息
- 13. 将DataRow []转换为DataTable而不丢失其数据集
- 14. 如何将字符串转换为float而不丢失Java中的结尾0?
- 15. 如何将byte []转换为无编码字符串,不丢失数据
- 16. 转换字符为数字,而不NA r中
- 17. 在将Time.at(ts).in_time_zone(time_zone)转换为字符串时丢失信息
- 18. 将时间转换为字符串时丢失了第二个信息
- 19. 将字符串转换为double,然后再将double转换为字符串而不丢失精度
- 20. 如何在不丢失信息的情况下将float转换为int?
- 21. 如何将字母数字字符串转换为R中的数字?
- 22. R如何将字符转换为数字?
- 23. 使用替换函数与VBA丢失字段代码信息
- 24. 在Arduino上将字节转换为int时数据丢失
- 25. 将负小数转换为字符串丢失 -
- 26. 将SQL Server EXP的精度转换结果丢失为数字
- 27. R将名称转换为数字
- 28. 如何将数字转换为字节?
- 29. 如何将数字转换为字符?
- 30. 如何将数字反转为整数而不是字符串?
尝试'选项(scipen = 999)'? –