#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)