我正在尝试将在访问数据库上执行的查询结果导入 R。我可以使用 RODBC 包建立连接并且能够检索记录,因此与数据库的连接不是问题。问题是当我将两列读入 R 时,它们是不准确的。
access 中的查询从表中读取数据,然后根据我执行的计算生成两个附加列。我导入了 18 列,其中 16 列直接来自表,另外两列是计算列。当我在访问中执行此查询时,一切都很好。access 中的两个计算列的结果(许多 IIF 语句的结果),我将其称为 V1 和 V2,运行查询后在 access 中的结果如下所示:
V1 V2
A -.1
A 0
A .2
B .2
A -.3
C 0
A .03
V1 采用三个值(A、B、C),V2 包含浮点数,范围从大约 -.35 到 1.5。
这些值正是我想要的,所以我知道当我在 access 中运行查询时它是有效的。
我想在 R 中获得这些相同的值,所以我运行生成上述结果的相同查询,如下所示:
query = "Select ..."
channel = odbcConnectAccess2007("DatabaseLocation.accdb")
df = sqlQuery(channel, query)
同样,与数据库的连接不是问题。在我尝试从 R 运行此查询后,两个计算列(V1 和 V2)的结果与我在 access 中运行查询时的结果不匹配。其他列是直接从表中读取而没有任何计算的,它们应该是这样的。在 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,而当我在 access 中运行相同的查询时,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