1

大きな整数を含む列をデータベースから R に取得しています (RJDBC の 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 つの数字を参照してください。彼らは間違ってる!破損した数値(bigintの場合)を使用して、データをデータフレームに自動的に変換しているようです(これは問題ありませんが)。特に RJDBC パッケージを使用して dbGetQuery を使用している場合に、上記の問題を解決する方法について何か提案はありますか?

4

1 に答える 1

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

私はあなたのデータベース アプリケーションについてお手伝いすることはできませんが、これはあなたの問題を解決するための出発点となるはずです。

于 2014-12-06T14:39:40.877 に答える