9

RODBCを使用してOracleデータマートからRにデータをプルしようとしています。私は自分の問題のいくつかを解決することができましたが、1つの基本的な質問があります。

データベースにあるフォーマットを保持するにはどうすればよいですか?

次のコマンドを使用する

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F)

私のデータは期待どおりに取得されますが、一部のフィールドは、文字である必要があるときにRで一度数値および論理に変換されます。私が使用すればこれを回避することができます:

uapp <- sqlQuery(ch, SQL, stringsAsFactors=F, as.is=T)

しかし、希望する日付としてフォーマットされている列を「失う」。

4

2 に答える 2

6

あなたも私が苦労してきたギャップに巻き込まれています。何が「正しい」とか「最善」かについては意見を述べることはできませんが、私が過去に行ったことだけです。

私は通常、最初の例で行ったことを行い、型の変更が R に入ったら処理するだけです。後者の方法を実行したい場合は、R に入った日付を変換できます。私の Oracle システムは常に設定されているようです「22-NOV-10」形式で日付を返すまで、解析するのが面倒です。したがって、クエリで Oracle の to_char() 関数を使用して、日付を R が簡単に認識できる形式にフォーマットします。

したがって、たとえば、SELECT ステートメントに次のように記述できます。

to_char(myDate, 'yyyy-mm-dd') as myDate

次に、それを myData というデータ フレームに取り込み、次のようにします。

myData$properDate <- strptime(myData$myDate, "%Y-%m-%d")

日付の修正に対処するか、他のフィールドの修正に対処するかは、実際には、日付フィールドの数と、最初の方法で混乱する日付以外のフィールドの数によって異なります。しかし、私の経験では、どちらかを修正することになります。

方法 1 を使用する際の考慮事項: フィールドを特定の型に強制するために、SQL で cast() を使用してみてください。RODBC によるデータ型の悪用で問題が発生したのは、サーバー側で型があいまいな場合だけです。これは通常、SQL 側の CASE ステートメントまたはそのようなものの結果です。

于 2010-11-22T20:08:54.767 に答える