R语言as.numeric()转换字符型数值异常改变(非因子调用问题)
问题原因
这不是as.numeric()函数的bug,也和因子转换问题无关,本质是R默认数值类型的精度限制导致的必然结果:
- R默认的
numeric类型是64位双精度浮点数,该格式仅能精确存储不超过2^53(即9007199254740992,约16位十进制数)的整数。 - 你输入的长数值为17位,已经超过了双精度浮点数的精确整数存储上限,转换时会被自动舍入到最接近的可表示浮点值,所以会出现不同字符串转换后结果相同、数值和原串不一致的表现,并非“无规律修改”。
解决方案
你可以根据使用场景选择对应方案:
- 如果需要保留数值属性、后续要做数值运算:你已安装的
bit64包可以支持64位整数的存储和运算,调用as.integer64()转换即可:
library(bit64) library(dplyr) "74156618463805445" %>% as.integer64() # 输出:74156618463805445
- 如果该长数值是ID、编码类标识,不需要做加减等数值运算:直接保留为字符串格式即可,不需要转数值,完全避免精度丢失问题。
内容的提问来源于stack exchange,提问作者user24465
相关产品推荐
相关产品推荐

