我正在尝试从访问中将数据拉到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)

08-24 12:51
查看更多