我正在尝试从访问中将数据拉到R中,我已经成功完成了。
现在,我要做的是用一行代码而不是一行代码插入所有需要的表。
例:
我有5张桌子:
3/15政策细节
6/15政策细节
9/15政策细节
12/15政策细节
3/16政策细节
如您所见,所有表都以“策略详细信息”结尾,但以不同的日期开头。
我的原始解决方案:
library(RODBC)
db<-file.path("C:\\Path\\To\\Database.accdb")
db
channel<-odbcConnectAccess2007(db)
sqlTables(channel,tableType = "TABLE")$TABLE_NAME ##List all table names
Q1.15<-sqlFetch(channel,"3/15 Policy Details")
Q2.15<-sqlFetch(channel,"6/15 Policy Details")
close(channel)
我必须为每个季度使用sqlFetch。我想要做的是在所有表中引入一串代码,反对每个季度编写一行单独的代码。
最佳答案
考虑在返回的表名列表上使用grep()
。然后使用lapply()
将获取的表绑定到列表中,然后使用list2env
将其取出以分离数据框对象:
library(RODBC)
db <- file.path("C:\\Path\\To\\Database.accdb")
channel<-odbcConnectAccess2007(db)
accTables <- sqlTables(channel,tableType = "TABLE")$TABLE_NAME
accTables <- accTables[grep(".*Policy Details$", accTables)]
dfList <- lapply(accTables, function(t) sqlFetch(channel, t))
close(channel)
# NAME EACH DF ELEMENT THE SAME AS TABLE NAME
dfList <- setNames(dfList, accTables)
# OUTPUT EACH DF TO INDIVIDUAL OBJECT
list2env(dfList, envir=.GlobalEnv)