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