RJDBC错误地从数据库表中读取大整数

时间:2014-12-06 14:27:38

标签: r bigint rjdbc

我正在从数据库中检索包含大整数的列到R(使用RJDBCs dbGetQuery方法)。对于测试用例,可以考虑以下数字

1000522010609612 
1000522010609613 
1000522010609614 
1000522010609615 
1000522010609616 
1000522010609617 
**971000522010609612 
1501000522010819466 
971000522010943717 
1501000522010733490**

R似乎错误地阅读了内容。我在R中可以使用的方式(在我使用RJDBC从数据库中读取之后)是:

1000522010609612
1000522010609613
1000522010609614
1000522010609615
1000522010609616
1000522010609617
**971000522010609664
1501000522010819584
971000522010943744
1501000522010733568**

查看最后4个数字。他们错了!它似乎是自动将数据转换为数据帧(这很好 - 但)与损坏的数字(对于bigints)。关于如何解决上述问题的任何建议,特别是当我们使用RJDBC包使用dbGetQuery时?

1 个答案:

答案 0 :(得分:2)

您的数据以浮点数读入:

DF <- read.table(text="1000522010609612 
1000522010609613 
1000522010609614 
1000522010609615 
1000522010609616 
1000522010609617 
971000522010609612 
1501000522010819466 
971000522010943717 
1501000522010733490")

class(DF[,1])
#[1] "numeric"
sprintf("%20f", DF[10, 1])
#[1] "1501000522010733568.000000"

您可以将其作为字符串读取并转换为大整数或直接读入大整数:

library(bit64)

DF <- read.table(text="1000522010609612 
1000522010609613 
1000522010609614 
1000522010609615 
1000522010609616 
1000522010609617 
971000522010609612 
1501000522010819466 
971000522010943717 
1501000522010733490", colClasses = "integer64")

#                    V1
#1     1000522010609612
#2     1000522010609613
#3     1000522010609614
#4     1000522010609615
#5     1000522010609616
#6     1000522010609617
#7   971000522010609612
#8  1501000522010819466
#9   971000522010943717
#10 1501000522010733490

我无法帮助您处理数据库应用程序,但这应该是解决问题的起点。