RJDBC неправильно считывает большие целые числа из таблицы базы данных

Я извлекаю столбец, содержащий большие целые числа, из базы данных в R (используя метод dbGetQuery RJDBC). Для тестового примера можно рассмотреть следующие числа

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). Любое предложение о том, как мы можем решить вышеуказанную проблему, особенно когда мы используем dbGetQuery с использованием пакета RJDBC?


person acc    schedule 06.12.2014    source источник


Ответы (1)


Ваши данные считываются как числа с плавающей запятой:

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

Я не могу помочь вам с вашим приложением базы данных, но это должно стать отправной точкой для решения вашей проблемы.

person Roland    schedule 06.12.2014
comment
dbGetQuery должен иметь аргумент colClasses, который позволит импортировать эти столбцы как символы. - person joran; 06.12.2014