Сохранение и загрузка файлов

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

Таблицы

Огромная часть аналитических данных существует в виде таблиц. Таблицы привычны, понятны, удобны для анализа. В R таблицы называются data.frame.

Таблицу можно сохранить в разных форматах, но наиболее популярным является формат CSV (comma-separated values — значения, разделенные запятыми). Например, такая таблица

Будет сохранена в файле так:

Имя,Возраст,Средний балл
Петя,12,4
Миша,13,3

Такой формат понимают большинство программ. Однако в России и некоторых странах запятая используется как десятичный разделитель:

Тогда получится:

Имя,Возраст,Средний балл
Петя,12,2,4
Миша,13,5,3

Будет непонятно, то ли у Пети возраст 12,2 и балл 4, то ли возраст 12, а балл 2,4. Поэтому фактически существует два формата: CSV1 и CSV-2

CSV-1 — разделитель полей: запятая, десятичный разделитель: точка:

Имя,Возраст,Средний балл
Петя,12.2,4
Миша,13.5,3

CSV-2 — разделитель полей: точка с запятой, десятичный разделитель: запятая:

Имя;Возраст;Средний балл
Петя;12,2;4
Миша;13,5;3

По умолчанию, если на компьютере установлена операционная система, настроенная на русский язык, будет использоваться CSV-2

Файлы формата CSV удобны тем, что они по умолчанию открываются в MS Excel. Таблицу MS Excel тоже очень легко сохранить в СSV — для этого нужно выбрать «Сохранить как» — «Тип файла» — «CSV (разделитель запятая)». Не перепутайте, там есть еще варианты, начинающиеся на «CSV». И не смущайтесь, что написано «разделитель-запятая»: если у вас MS Excel на русском, то разделителем будет все же точка с запятой. )

Как их прочитать

Для чтения таких файлов применяют функции read.csv и read.csv2, в зависимости от типа csv. Мы, разумеется, будем использовать read.csv2.

d=read.csv2('file.csv') #если ваш файл расположен локально
d=read.csv2('https://1553.ru/rawdata/mushrooms.csv') #если ваш файл расположен где-то в интернете

у каждой таблицы (data.frame) — а именно data.frame создается, когда вы используете эти функции — есть имена столбцов и имена строк. По умолчанию функция read.csv и read.csv2 считают, что первая строка файла — это имена столбцов, а вместо имен строк она просто ставит номера. Например, при загрузке файла, о котором мы говорили выше, получится такая таблица:

  Имя  Возраст Средний.балл
1 Петя    12.2            4
2 Миша    13.5            3

Обратите внимание, что пробелы в названии столбцов преобразуются в точки — пробелов там быть не должно.

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

d=read.csv2('file.csv', row.names=1) 

Получится:

     Возраст Средний.балл
Петя    12.2            4
Миша    13.5            3

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

Внимание! Этот трюк с именами строк получится только если все имена строк разные. Если будет два Пети, ничего не выйдет.

Первый столбец имеет смысл сделать именами строк, если он содержит не данные, которые мы хотим обрабатывать, а некоторое название, объяснение, идентификатор каждой строки, например:

Еще одно внимание! При загрузке файлов, содержащих русские буквы, у вас могут возникнуть сложности. Прочитайте про них вот тут.

Как их записать

Записать таблицу в CSV можно функциями write.csv и write.csv2, в соответствии с нужным вам форматом разделителей

write.csv2(d, 'file2.csv')

При записи файла в него добавятся имена строк как первый столбец без имени. Если вам этого не нужно, добавьте

write.csv2(d, 'file2.csv', row.names=FALSE)

Файлы, записанные таким образом, легко откроются в MS Excel.

А если нужно сохранить не таблицу, а что-то еще?

Все переменные и объекты R можно сохранить в виде внутреннего файла R. Его можно использовать только в R, просмотреть его содержимое не удастся. Для сохранения и загрузки используются функции save и load.

a=2 #создадим переменную
b=3 #и еще одну
a+b #посмотрим на результат сложения

save(a, b, file='01.RData') #сохраним обе переменные в файл
rm(a,b) #удалим обе переменные

a+b #а теперь ничего не выйдет - переменных больше нет

load('01.RData') #загрузим сохраненный файл
a+b #снова получается - переменные вновь появились

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

Читайте также: