【发布时间】:2016-04-05 21:17:46
【问题描述】:
我正在尝试合并不同的 ACCESS 文件(位于同一文件夹下的不同子文件夹中)。在阅读了不同的博客和人们在这里提出的一些问题之后,我想出了下面的代码。
Parent.Folder<-"D:/Documents/Rwd"
setwd(Parent.Folder)
library(RODBC)
subfolders<-list.dirs(Parent.Folder, recursive = TRUE)[-1]
list_filenames<-list.files(subfolders, recursive = FALSE)
list_filenames<-paste("D:/Documents/Rwd/", list_filenames, sep="")
list_filenames<-sub(".mdb","",list_filenames)
for (file in list_filenames){
if(!exists("data")){
channel<-odbcConnectAccess(file)
data<-sqlQuery(channel,paste("select* from HRESULTS"))
close(channel)
}
if(exists("data")){
channel<-odbcConnectAccess(file)
temp_data<-sqlQuery(channel,paste("select* from HRESULTS"))
data<-rbind(data,temp_data)
rm(temp_data)
close(channel)
}
}
所有表格都采用相同的格式,我的目标是将它们放在一个数据框中。第一个 if 语句运行良好,并给了我一个包含来自第一个文件的数据的数据框,但之后我收到错误“sqlQuery 中的错误(通道,粘贴(“从 HRESULTS 中选择*”)): 第一个参数不是开放的 RODBC 通道” 我以前从未使用过 ODBC 或 SQL,所以如果我犯了一个非常明显的错误,我深表歉意。任何帮助将不胜感激。谢谢!
【问题讨论】:
-
听起来你的错误是文件存在。访问文件很挑剔,他们喜欢通过 R-32 位进行连接。同样取决于文件,
odbcConnectAccess2007可能会更好地为您服务。值得注意的是,我的经验是使用 .accdb 文件,不确定它们的行为是否不同。旁注,您的查询看起来不错,如果您要抓取整张桌子,可以使用sqlFetch,我发现它要快一些。 -
This 也可能有帮助,它只是从包
Hmisc中提取 mdb 表。 -
@Badger - 我尝试安装 mdb-tools 包,因为它看起来对于 Hmisc 是必需的,但出现错误,即“mdb-tools”不适用于 R 版本 3.2.3。不知道应该怎么做才能解决这个问题。
标签: r