如何将Microsoft Access .accdb数据库文件中的数据读入R?

18

RODBC文档表明这是可能的,但我不确定如何使用此软件包从Microsoft Access(新的.accdb格式)文件中读取数据到R(在Debian GNU / Linux上)。文档谈到了驱动程序,但我不太明白如何查看已安装哪些驱动程序,特别是是否有为我安装的驱动程序可以访问那些.accdb文件。

您使用什么代码来读取.accdb文件中的数据?请指出您所在的平台以及是否需要安装特殊驱动程序。


就我所知,Linux 上没有 ACE 支持,只有 Jet 4。因此,您需要使用 MDB 格式而不是 ACCDB 格式。但是我是一个 Access 程序员和 Windows 用户,所以我可能错过了它 - 但这在 SO 上还没有出现。 - David-W-Fenton
8个回答

9
要将一个2007年后的Microsoft Access文件(.accdb)导入R中,可以使用RODBC软件包。
对于一个名为"foo.accdb"的.accdb文件,其中包含以下表:"bar"和"bin",存储在John Doe电脑的桌面上:
library(RODBC)    #loads the RODBC package
dta <- odbcConnectAccess2007("C:/Users/JohnDoe/Desktop/foo.accdb")   #specifies the file path
df1 <- sqlFetch(dta, "bar")   #loads the table called 'bar' in the original Access file
df2 <- sqlFetch(dta, "bin")   #loads the table called 'bin' in the original Access file

1
我在RODBC库中没有看到这个函数。 - Zafar
你使用的是哪个版本的 RODBC (packageVersion("RODBC"))?在 1.3.15 版本中,这两个函数 (odbcConnectAccess2007()sqlFetch()) 在我的电脑上都可以使用。 - coip
2
啊,这些函数只存在于 Windows R 上,而不是我正在运行的 Linux R 上。 - Zafar
这还有效吗?此函数未记录:https://cran.r-project.org/web/packages/RODBC/RODBC.pdf - andschar
2
是的,@andschar,它仍然有效。我安装了最新版本的RODBC,它仍然具有所有这些可用的功能。 - coip
另外,人们在将Access数据库导入R时面临的另一个常见问题是32位和64位之间的不兼容性。它们需要保持一致。例如,如果您的Access程序是32位,则需要使用32位版本的R,或者您可以安装新的Access驱动程序来解决该问题。 - coip

5
您所链接的页面标题为RODBC: ODBC数据库访问,可能会产生误导。在这里,Access并不是指MS Access,而是指连接性。RODBC是R的ODBC管理器,它作为中介提供通信,使R和目标数据库的ODBC驱动程序之间进行通信。因此,在GNU/Linux上,您仍然需要一个MS Access数据库文件的ODBC驱动程序... RODBC没有提供这样的驱动程序。

然而,我不知道是否有任何免费(自由和/或啤酒)的Linux MS Access ODBC驱动程序。Easysoft销售其中一种,但价格不菲。其他供应商也可能提供类似的产品,但我还没有去查看。

使用Windows机器将您的ACCDB导出到R可以使用的格式可能更容易。或者在Windows上运行R,而不是在Linux上运行。


1
我错过了“GNU/Linux”这一点。你是对的 - 在Linux上没有机会。 - Patrick
我看到了像这篇帖子一样的东西,他们访问.mdb文件:http://rforge.org/2009/08/07/open-access-mdb-file-with-rodbc/ 但是,我认为此时我需要一个Windows驱动程序...确实,在我的rodbc软件包中似乎没有odbcConnectAccess()方法...非常感谢你的指引! - Egon Willighagen

3
您需要驱动程序才能将Access连接到ODBC接口。如果您已安装Access,则应该在系统上拥有这些驱动程序。如果没有,请从微软下载Access数据库引擎。然后在ODBC中创建数据连接(如果运行64位Windows,则可能需要运行32位c:\windows\sysWOW64\odbcad32.exe)。请注意,此方法不适用于GNU / Linux。如下所述,运行时仅限于Windows。关于代码,您可能会从odbcConnect(dsn, uid = "", pwd = "", ...)开始,并且文档可以帮助您了解细节。

3

ODBC是一种“即插即用”的系统,用于连接不同的组件。

RODBC允许您将ODBC提供程序中的内容导入R。但您仍需要所涉及的数据库系统的(缺乏更好的词语)ODBC导出驱动程序。您需要在操作系统上安装此驱动程序---因此,我认为使用Access-into-Linux组合您将无法成功。这只适用于Windows。

人们已经成功使用FreeTDS驱动程序(用于Sybase底层的TDS协议以及通过早期许可证也支持MS-SQL)来访问SQL Server,但通常需要费力才能使其正常工作。


2
我个人使用的最佳方法是:
#Package
library(RODBC)

#Defining the path
datab<-file.path("Main_File.accdb")
channel<-odbcConnectAccess2007(datab)

#reading the individual files inside the Main
table<-sqlFetch(Channel,"File_1")

这将从Main_File中的"File_1"获取数据。

但上述代码不支持UTF编码。


2
library(RODBC)
db<-file.path("student.accdb")
channel<-odbcConnectAccess2007(db)
data<-sqlFetch(channel,"stud")

data
  ID  Name M1 M2 M3 M4 M5 Result
1  7 Radha 85 65 92 50 62   Pass
2  8  Reka 75 85 96 75 85   Pass

1

除了直接访问,另一种选择可能是通过 MS Access 方便地导出数据。最近的 MS Access 至少允许保存各种导出步骤。然后,您可以相对快速地运行各种查询/表的导出。

我知道这并没有回答问题,但如果您无法运行 RODBC,则可能是一个解决方法。


-1

我的解决方案(我发现最简单的):

  • 从Microsoft安装“Access数据库引擎”
  • 在Windows管理工具中使用ODBC 32b工具配置与Access数据库(mdb或accdb)的连接。也可以使用c:\ windows \ sysWOW64 \ odbcad32.exe
  • 以32位模式运行RStudio;可以在RStudio设置中修复它(更改后重新启动RStudio)
  • 最后,RODBC函数成功地工作。

注意:它仅适用于Windows,而不适用于Linux。个人建议在Xubuntu中使用Windows作为Virtual Box客户端。


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