2016-10-07 3 views
0

Я пытаюсь извлечь данные в R из доступа, который я успешно выполнил.Импортировать данные в 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 для каждого кватер. То, что я собираюсь сделать, - это привести все таблицы с одной строкой кода, противоположной для выполнения отдельной строки кода для каждой четверти.

ответ

2

Рассмотрите возможность использования grep() в списке возвращаемых имен таблиц. Затем связать таблицы выборок в список с lapply(), а затем к отдельным объектам dataframe с 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) 
+0

Спасибо. Эта строка кода работала отлично. – Miguel

Смежные вопросы