sql - R在读取数据帧时复制大整数

标签 sql r type-conversion precision

我有一个数据库表,其中有一列包含不同的 17 位数字。当我要求 R 将此表的一部分或全部读入数据帧时,它会将某些值复制 4 或 5 次并丢弃其他值。结果是,一个表有 17 个唯一值最终会变成 6。这很奇怪。当我使用 RODBC 连接读入数据或者我是否将它们保存到 csv 并以这种方式加载它们时,就会发生这种情况。这绝对是一个 R 问题,因为我已经用假数据隔离了这个问题:

base_num <- "9600000005206"

# Now create a vector of unique numbers in character format
x <- paste0(base_num, seq(5680, 5760, 1))

x

x
[1] "96000000052065680" "96000000052065681" "96000000052065682" 
"96000000052065683" "96000000052065684" "96000000052065685" 
"96000000052065686"
[8] "96000000052065687" "96000000052065688" "96000000052065689" 
"96000000052065690" "96000000052065691" "96000000052065692" 
"96000000052065693"
[15] "96000000052065694" "96000000052065695" "96000000052065696" 
"96000000052065697" "96000000052065698" "96000000052065699" 
"96000000052065700"

# Convert them to numeric
# ta-da! Duplicate values and dropped values
as.numeric(x)

 [1] 96000000052065680 96000000052065680 96000000052065680 
 96000000052065680 96000000052065680 96000000052065680 96000000052065680
 [8] 96000000052065680 96000000052065696 96000000052065696 
 96000000052065696 96000000052065696 96000000052065696 96000000052065696
 [15] 96000000052065696 96000000052065696 96000000052065696 
 96000000052065696 96000000052065696 96000000052065696 96000000052065696

这就是当我从数据库或 CSV 中读取时发生的情况,我知道该列包含唯一值。谢谢。

编辑:

感谢您指出问题以及如何在 R 中修复它。问题仍然是 R 在读入数据时正在完成此转换。即使我将查询指定为:

CAST(longnumber AS VARCHAR(50)) as 'target_column'

R 仍然 将其视为太长的整数。我必须写:

CAST(longnumber AS VARCHAR(50)) + 'S' as 'target_column'

为了让 R 将其作为字符字段读入,这就是我所需要的。有什么想法吗?

最佳答案

尝试使用 integer64:

library(bit64) 
as.integer64(x)

关于sql - R在读取数据帧时复制大整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401839/

相关文章:

php - 我需要使用什么mysql代码?查找日期之间创建的所有 ID

r - 对象 'pkgInfo' 未找到,r

c++ - 隐式转换以匹配运算符参数

C++:如何处理 NULL 值(例如来自数据库)?

sql - 帮助基本的 SQL QUERY

sql - 如何返回当天写的最新行?

r - 准确设置 ggsave 的大小

r - 通过累积分布的中值添加垂直线(ggplot2)

scala - 创建包含 AnyVal 类型的数组时如何抑制从 Long 到 Double 的自动转换

python - Pandas 合并两个没有某些列的数据框