У меня есть 48 матриц размеров 1000 строк и 300 000 столбцов, где каждый столбец имеет соответствующий идентификатор, и каждая строка является измерением в один момент времени. Каждая из 48 матриц имеет одинаковую размерность, и их идентификаторы столбцов одинаковы.хранить данные матрицы в SQLite для быстрого извлечения в R
Способ, которым хранятся теперь матрицы, - это объекты RData, а также текстовые файлы. Я думаю, для SQL мне пришлось бы транспонировать и хранить по ID, и в этом случае теперь матрица будет иметь размеры 300 000 строк и 1000 столбцов.
Я думаю, если я транспонировать его небольшую версию данных будет выглядеть следующим образом:
id1 1.5 3.4 10 8.6 .... 10 (with 1,000 columns, and 30,0000 rows now)
Я хочу, чтобы хранить их таким образом, таким образом, что я могу использовать R, чтобы получить несколько строк (От 5 до 100 каждый раз).
Общая стратегия, которую я имею в виду следующее:
(1) Создание базы данных в sqlite3 с помощью R, которые я буду использовать для хранения матрицы (в разных таблицах)
Для файла 1, 48 (каждый файл имеет тусклый 1000 строк и столбцов) 300000:
(2) Считывание файла в R
(3) Сохраните файл в виде матрицы в R
(4) Переместите матрицу (теперь ее размеры 300 000 строк и 1000 столбцов). Каждая строка теперь является уникальным идентификатором в таблице в sqlite.
(5) Самосвал/записать матрицу в базу данных sqlite3, созданной в (1) (дамп в новую таблицу, вероятно?)
шаги 1-5 для создания БД.
Далее необходимо шаг 6 для чтения в базе данных:
(6) Прочитайте некоторые строки (не более 100 или около того, в то время) в R в качестве матрицы (суб).
Простой пример кода, выполняющий шаги 1-6, был бы лучше.
Некоторые мысли:
Я использовал SQL раньше, но это было главным образом для хранения табличных данных, где каждый столбец имел имя, в этом случае каждый столбец только один пункт матрицы данных, я думаю, я мог бы просто назовите его col1 ... to col1000? или есть лучшие трюки?
Если я смотрю на: http://sandymuspratt.blogspot.com/2012/11/r-and-sqlite-part-1.html они показывают этот пример:
dbSendQuery(conn = db,
"CREATE TABLE School
(SchID INTEGER,
Location TEXT,
Authority TEXT,
SchSize TEXT)")
Но в моем случае это будет выглядеть так:
dbSendQuery(conn = db,
"CREATE TABLE mymatrixdata
(myid TEXT,
col1 float,
col2 float,
.... etc.....
col1000 float)")
Т.е., я должен ввести в col1, чтобы ... col1000 вручную, что не очень удобно. Здесь я в основном застреваю. Некоторый фрагмент кода мне поможет.
Затем мне нужно сбрасывать текстовые файлы в базу данных SQLite? Опять же, не знаете, как это сделать с R.
Кажется, я мог бы сделать что-то вроде этого:
setwd(<directory where to save the database>)
db <- dbConnect(SQLite(), dbname="myDBname")
mymatrix.df = read.table(<full name to my text file containing one of the matrices>)
mymatrix = as.matrix(mymatrix.df)
Здесь мне нужно теперь сое о том, как сбросить это в базу данных ...
Наконец,
Как быстро извлекать значения (без необходимости считывать все матрицы каждый раз) для некоторых строк (по идентификатору), используя R?
Из учебника было бы выглядеть следующим образом:
sqldf("SELECT id1,id2,id30 FROM mymatrixdata", dbname = "Test2.sqlite")
Но его ID1, ID2, ID30 жестко прописаны в коде и мне нужно динамически получить их. I.e., иногда мне может понадобиться id1, id2, id10, id100; а в другой раз я может понадобиться id80, id90, id250000 и т.д.
Нечто подобное было бы больше approp для моих потребностей:
cols.i.want = c("id1","id2","id30")
sqldf("SELECT cols.i.want FROM mymatrixdata", dbname = "Test2.sqlite")
снова, не зная, как продолжить здесь. Фрагменты кода также помогут.
Простой пример мне очень помог, не нужно кодировать все 48 файлов и т. Д. Просто простой пример будет замечательным!
Примечание: Я использую сервер Linux, SQlite 3 и R 2.13 (я также мог бы его обновить).
Возможно, вы захотите посмотреть на [PyTables] (http://www.pytables.org/moin). Если вы привыкли работать с SQL, см. Эти [подсказки для пользователей SQL] (http://www.pytables.org/moin/HintsForSQLUsers). – ChrisP
@ChrisP они выглядят потрясающе, хотя мой коллаборационист только что обновил меня, что они нам нужны в R, потому что весь код обработки был выполнен в R ... но большое предложение, я изменил вопрос на R/sql. – Dnaiel
Вы можете работать с HDF5 также из R с пакетом h5r –