我有一个数据库表,其中有一列包含不同的 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/