在Windows和Mac上以编程方式读取Access(.mdb)文件到R中

16
我正在尝试编写一个开放数据包,将纽约州的教育数据读入R中。这些数据是以Access数据库的形式提供的。
我想编写一个函数来下载、读取和导入这些文件,并希望它能在各个平台上得到支持。 现有的方法建议安装32位的R版本,这不适用于程序化访问。
#RStats的一次巡回表明,这是一个常见的痛点(1234)。
在OS X/Linux上,您可以使用Hmisc package中的mdb.get,前提是您有一个名为mdb-tools的第三方库。 但对于Windows似乎帮助不大。
接受的答案将在Windows、OS X和Linux上将链接above.mdb文件读入R。

嗯...你看过ZIP文件的内容吗?.mdb文件是一个单表格,看起来与纯文本和高度跨平台的.tab文件具有“完全相同的数据”。 - hrbrmstr
嗨@hrbrmstr - 我可能应该在链接中选择了一个不同的示例 - 目标是阅读多年的数据,而纽约州只在过去一年发布了.tab。例如,如果您查看https://data.nysed.gov/files/assessment/13-14/3-8-2013-14.zip,您会发现它只是一个`.mdb`。 - Andrew
如果您查看Twitter链接,您会发现R“Distance”包的作者@david-lawrence-miller也遇到了这个问题。不确定关闭投票是否是您的,但如果您能重新考虑一下,我将不胜感激。 - Andrew
3
if语句是你的好朋友。在代码中使用if语句来包装特定平台的解决方案(例如Windows下的RODBC和linux或macOS上的mdb.get())是没有问题的。有时候你必须做些额外的工作才能获得数据。 - hrbrmstr
@hrbrmstr 不错的建议。Andrew,你可以通过 if/else 的方式回答自己的问题。 - Tyler Rinker
1个回答

2

您觉得只用RODBC可以吗?您是否也能下载并使用mdb文件(例如在mdb文件内直接进行查询/视图)?

我通常使用以下代码块将数据从Access数据库加载到R中:

# read in the data
library(RODBC)
db <- odbcDriverConnect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};
                        DBQ=C:\\Path\\To\\Database\\my_db.accdb")

# Get data
data <- as_tibble(sqlFetch (db , "Table or Query Name", rownames=TRUE))

1
这并没有回答问题,因为OP已经意识到RODBC的方法(第二段中的链接),发现由于需要使用32位R而无法解决他们的问题,并要求提供一种在各个平台上都可行的替代方案。 - Jan Boyer
谢谢@DarwinsBeard - 我会尝试一下! - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接