Построить одну таблицу SQL из нескольких столбцов данных R - PullRequest
1 голос
/ 12 марта 2020

Я работаю с очень большим набором биологических данных, с ~ 1000 переменных (смесь чисел c и символа), измеренных из ~ 1 000 000 клеток. Излишне говорить, что таблица слишком велика, чтобы поместиться в память. Удаление переменных не вариант для моего последующего анализа, и таблица, вероятно, будет расти со временем. Поэтому моя стратегия состоит в том, чтобы преобразовать данные в базу данных SQL, которую можно легко запросить из R.

Здесь я использую базу данных PostgreSQL с пакетами DBI и ODB C:

db <- DBI::dbConnect(odbc::odbc(),
                 Driver = "PostgreSQL ODBC Driver(UNICODE)",
                 Server = "127.0.0.1",
                 Database = "db1",
                 UID = "user",
                 PWD = "password")

Для небольшой таблицы в памяти можно создать новую таблицу data:

dbWriteTable(db, "data", data)

Аналогично для большой таблицы на диске (например, большой .csv) может обрабатывать данные в пакетном режиме. т.е. загружать 100 строк данных за раз и добавлять строки для увеличения таблицы SQL.

Однако в моем случае эта стратегия невозможна, так как каждая переменная (столбец) хранится в виде вектора в отдельном файле на диске (это из проприетарного формата, я ничего не могу сделать, чтобы помочь этому). Поэтому для построения таблицы SQL мне потребуется загрузить каждый столбец в R, а затем добавить каждый столбец по очереди в базу данных SQL.

Каков наилучший способ построения таблицы по одному столбцу за раз? Или есть альтернативная стратегия, которую мне не хватает?

Например, можно ли создать каждый столбец как отдельную таблицу, а затем связать их вместе. например:

data = list(col1 = 1:10, col2 = 11:20, col3 = 21:30)

# Create tables
for(i in 1:length(data)) {
   dbWriteTable(db, as.character(i), data.frame(col1))
}

### Function to bind columns into single table ###
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...