Импорт данных в R из access

#mysql #r #ms-access

#mysql #r #ms-access

Вопрос:

Я пытаюсь извлечь данные в R из access, что я успешно сделал.

Теперь то, что я хочу сделать, это ввести все необходимые таблицы с одной строкой кода, противопоставленной одной за раз.

Пример:

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

Ответ №1:

Рассмотрите возможность использования 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)