Access データベースで実行されたクエリの結果を R にインポートしようとしています。RODBC パッケージを使用して接続を確立でき、レコードを取得できるため、データベースとの接続は問題になりません。問題は、R に読み込むと 2 つの列が不正確になることです。
Access のクエリは、テーブルからデータを読み取り、実行した計算に基づいて 2 つの追加の列を生成します。18 列をインポートします。そのうち 16 列はテーブルから直接取得され、残りの 2 列は計算列です。アクセスでこのクエリを実行すると、すべて問題ありません。Access の 2 つの計算列の結果 (多くの IIF ステートメントの結果) (V1 および V2 と呼びます) は、クエリを実行した後、access で次のようになります。
V1 V2
A -.1
A 0
A .2
B .2
A -.3
C 0
A .03
V1 は 3 つの値 (A、B、C) を取り、V2 には約 -.35 から 1.5 の範囲の浮動小数点数が含まれます。
これらの値はまさに私が望んでいるものなので、アクセスで実行するとクエリが機能することがわかります。
R でこれらと同じ値を取得したいので、上記の結果を生成したのと同じクエリをアクセスで次のように実行します。
query = "Select ..."
channel = odbcConnectAccess2007("DatabaseLocation.accdb")
df = sqlQuery(channel, query)
繰り返しますが、データベースとの接続は問題ではありません。R からこのクエリを実行しようとした後、2 つの計算列 (V1 と V2) の結果が、アクセスでクエリを実行したときの結果と一致しません。計算なしでテーブルから直接読み取られる他の列は、本来あるべき状態です。R V1 および V2 でクエリを実行すると、次のようになります。
V1 V2
A 0
A 0
A .2
A .2
A 0
A 0
A .03
V1 では、すべての値が同じになりました (A)。V2 の場合、一部の値は正しく読み込まれますが、すべてではありません。多くの値が 0 に変更され、V2 の最小値は -.07 になりましたが、アクセスで同じクエリを実行すると、V2 の最小値は -.35 になりました。0 に変更されていない値が正しいです。
私の次のアイデアは、アクセスのクエリからテーブルを作成し、その新しいテーブル全体を読み込もうとすることです。ただし、最初に計画した方法でデータを取得することを強く望んでおり、将来的に回避できるように、この問題を把握したいと考えています。
編集: 独自の作業の一部であるため、実際のクエリを表示することはできませんが、非常によく似たクエリを次に示します。
Select
#First calculated column
(IIF(M.V3 = 1, 'C', IIF(M.V3 = 2, 'B', 'A'))) AS v1,
#Second calculated column, which is shortened from the real thing
(IIF(M.V4=0 AND M.V5 = 1, .0401, 0) +
IIF(m.V4=0 AND m.V5 = 0, -.0441, 0)) AS V2,
#other values are directly read from the table
M.V3, M.V4, M.V5, M.V6, M.V7, M.V8, M.V9,
M.V10, M.V11, M.V12, M.V13, M.V14, M.V15,
B.VFIRST & B.VLAST AS M.V16
FROM MASTER_TABLE M
INNER JOIN B_TABLE B ON M.V10 = B.V10