Лучший способ просто хранить данные для статистического анализа в R [закрыто]

12

Я уже некоторое время использую текстовые файлы для хранения своих данных для R без каких-либо проблем. Но для недавнего проекта размеры файлов становятся слишком большими для необработанных текстовых файлов. Какова лучшая простая альтернатива?

Той Молто
источник
5
Как текстовые файлы становятся слишком большими? Вы боитесь за их целостность? Не в состоянии открыть их в каком-либо другом программном обеспечении? Они слишком медленно загружаются? Слишком большой для вашего жесткого диска (ноутбук?)?
Гала
3
+1 Управление данными по мере роста проектов является универсальной проблемой в анализе данных (и вряд ли является специфической для R). Основная проблема связана с целостностью данных, а не с размером файла: предложение какой-либо формы сжатия просто затеняет это, а не решает.
whuber
Выше определенного размера TXT просто не работает. Я могу добавить дополнительные данные в текстовый файл и загрузить их в R, но эти дополнительные данные не в R. (Кстати, данные довольно богаты, так что, хотя сжатие может немного помочь, мне это не поможет, и я подозреваю, что по мере развития моего проекта у меня снова будут такие же проблемы.)
Toy Molto
Вы должны рассказать нам больше о своих данных, нет такого понятия, как «лучший способ получить какие-либо данные».
zx8754
Вы имеете в виду это read.tableили read.csvмолча терпите неудачу? Вы абсолютно уверены, что у вас нет нескольких файлов и ошибки кодирования (неправильный путь, неправильное имя файла и т. Д.)? Просто чтобы исправить идеи, вы также можете дать нам представление о том, сколько переменных и с какими записями вы приблизительно имеете дело.
Гала-концерт

Ответы:

10

Стандартный подход R заключается в использовании saveи load. Если вы запускаете saveфрейм данных после его импорта и аннотирования, вы можете указать, compress=TRUEи вы будете поражены сжатием и быстрым loadвременем. Это особенно хорошо работает, если размер объекта составляет менее 400 МБ. В противном случае ознакомьтесь с некоторыми из приведенных выше предложений или мощным ffпакетом в R.

В Hmiscупаковке есть маленькие обертки, Saveи, Loadчтобы сделать вышесказанное еще более безболезненным:

mydata <- csv.get(...)  # Hmisc package, has several options
Save(mydata)   # writes mydata.rda to current working directory
....
Load(mydata)   # reads mydata.rda and creates mydata data frame
Фрэнк Харрелл
источник
9

Взгляните на базы данных SQLite3. Каждая база данных является файлом, поэтому она не требует настройки сервера базы данных.

Чтобы создать базу данных:

$ sqlite3 my_db.db3
> CREATE TABLE my_table ( col1 TEXT );

Для использования с R, https://gist.github.com/lynaghk/1062939

momeara
источник
+1 Использование реальной базы данных - огромный шаг в правильном направлении.
whuber
Будет ли это подходящий инструмент? cran.r-project.org/web/packages/RSQLite/index.html
EngrStudent
Спасибо, я попробую этот маршрут. Я тоже посмотрел на MySQL, но, похоже, больше, чем мне нужно.
Игрушка Молто
4

Есть несколько общих вариантов.

  • Вы могли бы сжать текст.
  • Вы можете перейти на двоичный текст, а не писать в ascii

Большое сжатие зависит от данных.

Я предполагаю (и вы не указали, поэтому я должен догадаться), что вы хотите хранить данные в виде электронных таблиц в чем-то отличном от CSV (с разделителями-запятыми).

Один из моих любимых форматов (я люблю MatLab) - hdf.

Вот связанная с R информация о HDF:

Это суперкомпьютерный формат хранения данных высокой плотности. Это может быть очень быстро и эффективно. Это также (неудивительно) более плотный, чем заархивированный текст.

EngrStudent
источник
3

Стандартные функции чтения файлов в R теперь будут автоматически легко читать сжатые файлы. Итак, просто запустите gzip-сжатие для ваших данных и читайте как всегда, как если бы это был простой текст.

read.table('myfile.gz')
Джон
источник
Ухоженная! Я не знал этого. Спасибо.
EngrStudent