R 将data.table列从字符转换为数字似乎会改变唯一性

R 将data.table列从字符转换为数字似乎会改变唯一性,r,data.table,R,Data.table,我需要将data.table字符列转换为数字。不知何故,转换后的唯一数值似乎不再是唯一的。我认为这可能与大数值有关。有没有办法解决这个问题 library(data.table) options(scipen = 20) DT = data.table(col_a = letters[1:5], col_b = as.character(72224192551488:72224192551492)) 按列b输出条目数(如预期) 将列b转换为数字 DT[, co

我需要将
data.table
字符列转换为数字。不知何故,转换后的唯一数值似乎不再是唯一的。我认为这可能与大数值有关。有没有办法解决这个问题

library(data.table)
options(scipen = 20)

DT = data.table(col_a = letters[1:5],
                col_b = as.character(72224192551488:72224192551492))
按列b输出条目数(如预期)

将列b转换为数字

DT[, col_b := as.numeric(col_b)]
现在输出看起来不同了。不过,我期望得到相同的结果

DT[, .N, by = col_b]

            col_b N
1: 72224192551488 5

查看
摘要(DT$colu_b)

我的猜测是,将其转换为数字会以某种方式将其舍入。奇怪的是,总结与我们看到的不匹配:

> DT
   col_a          col_b
1:     a 72224192551488
2:     b 72224192551489
3:     c 72224192551490
4:     d 72224192551491
5:     e 72224192551492

可能是您的计算机上的数字数据达到最大值了吗
2^.Machine$double.digits
[1]我认为通常的建议是使用bit64包中的integer64。啊,我应该把它关上的。重新阅读时感到困惑,因为您更改了列类型…
.Machine$double.digits
=53应该足够了。实际上,真正的问题发生在以后连接该列上的不同data.tables时。我只是把它分解成一个简单的例子。无论如何,你可能想看看左边“链接”下的第一项,因为没有其他人来结束这个问题。
          Min.        1st Qu.         Median           Mean        3rd Qu.           Max. 
72220000000000 72220000000000 72220000000000 72220000000000 72220000000000 72220000000000 
> DT
   col_a          col_b
1:     a 72224192551488
2:     b 72224192551489
3:     c 72224192551490
4:     d 72224192551491
5:     e 72224192551492