长数字作为字符字符串

14 浏览
0 Comments

长数字作为字符字符串

作为我的数据集的一部分,其中一列是一系列24位数字。

例如:

bigonumber <- 429382748394831049284934

当我使用data.table::freadread.csv导入它时,它以指数格式的数字显示(例如:4.293827e+23)。

options(digits=...)不起作用,因为数字长度超过22位。

当我执行

as.character(bigonumber) 

我得到的是"4.29382748394831e+23"。

有没有办法将bigonumber转换为字符字符串并将所有数字显示为字符?我不需要对其进行任何数学运算,但我需要对其进行搜索并在其上进行dplyr连接。

我需要在导入后进行此操作,因为列数每个月都会变化。

(是的,在完美的世界中,我的上游数据提供商会使用哈希而不是长数字和每个月保持不变的静态列数,但我不能向他们规定这一点。)

0
0 Comments

长数字作为字符字符串出现的原因是R在处理大整数时会将其转换为double类型,导致精度丢失。即使设置了选项`options(digits=22)`,也无法保留所有的数字。因此,需要直接将数据读取为字符或因子类型来避免精度丢失。

解决方法之一是使用`gmp`包,该包允许使用任意大的整数。但是需要将数字以字符形式读取,以防止R内部将其转换为double类型。使用`as.bigz()`函数将字符转换为大整数类型,可以对这些数字执行计算并保留所有的位数。

以上是关于如何处理长数字作为字符字符串的解决方法。希望对需要处理超过22位数字的用户有所帮助。

0
0 Comments

长数字作为字符字符串出现的原因是因为尝试将太长的数字作为数值存储时,已经丢失了精度。解决方法是使用digest包中的digest函数对长数字进行md5哈希处理,将其转化为字符字符串。

可以使用以下代码将长数字转化为字符字符串:

library(digest)
bigonumber <- 429382748394831049284934
hash_big <- digest::digest(bigonumber)
hash_big
# "e47e7d8a9e1b7d74af6a492bf4f27193"

在将长数字作为数值存储时,会导致精度丢失。因此,可以使用digest函数对长数字进行md5哈希处理,将其转化为字符字符串,以避免精度丢失的问题。

0
0 Comments

长数字作为字符字符串的原因是因为在读取和处理包含长数字的数据时,可能会遇到数据溢出或截断的问题。解决方法是使用colClasses参数指定数据类型为字符型,以避免数据被解析为数值型而导致溢出或截断。

具体解决方法如下:

1. 使用read.csv函数读取数据时,可以在函数中使用colClasses参数来指定数据类型为字符型。

read.csv("~/Desktop/bignums.txt", sep="", colClasses = 'character')

2. 使用fread函数读取数据时,同样可以在函数中使用colClasses参数来指定数据类型为字符型。

fread("~/Desktop/bignums.txt", colClasses = 'character')

3. 如果只需要保留一个列作为长数字字符字符串,可以使用colClasses参数的向量形式。

read.csv("~/Desktop/bignums.txt", sep="", colClasses = c(bignums='character'))

通过使用colClasses参数,并将数据类型指定为字符型,可以确保长数字不会被解析为数值型而导致溢出或截断的问题。这样就可以正确地读取和处理包含长数字的数据。

0