Чтение CSV-файлов
Реальные данные приходят файлами. Учимся загружать CSV в R и превращать их в data.frame.
CSV (comma-separated values) — текстовый формат таблицы, где значения разделены запятыми, а строки — переносами.
CSV — самый распространённый формат обмена данными: его понимают Excel, базы данных, веб-сервисы, государственные порталы открытых данных. В R одна команда превращает CSV-файл в полноценный data.frame, готовый к анализу.
Почему CSV так популярен? Он предельно простой — это обычный текст, который откроет любой редактор и любая программа на любой платформе. Никаких закрытых форматов, версий и привязки к конкретному ПО: файл, выгруженный из системы десятилетней давности, прочитается и сегодня. Эта универсальность делает CSV «общим языком» данных. Поэтому умение надёжно загружать CSV — точка входа почти в любой реальный проект: данные приходят файлом, и первый шаг анализа — корректно затащить их в R.
Как выглядит CSV
Внутри файл — простой текст: первая строка обычно заголовки, дальше данные.
name,age,city Аня,25,Москва Борис,30,Казань Вера,22,Москва
Базовое чтение: read.csv
Встроенная функция read.csv читает файл и возвращает таблицу:
df <- read.csv("people.csv")
head(df)Аргумент header = TRUE (по умолчанию) говорит, что первая строка — заголовки. Если разделитель не запятая, а точка с запятой (частый случай в русской локали Excel), используют read.csv2 или указывают sep = ";".
Современный способ: read_csv
Из пакета readr (часть tidyverse) функция read_csv быстрее и аккуратнее: она сама определяет типы колонок и не превращает строки в факторы.
library(readr)
df <- read_csv("people.csv")Различие практичное: read_csv печатает, какие типы определил для каждой колонки, и реже преподносит сюрпризы с кодировкой и факторами.
Сохранение результата
Обратная операция — запись таблицы в файл:
write.csv(df, "result.csv", row.names = FALSE)Аргумент row.names = FALSE убирает лишний столбец с номерами строк, который иначе R добавит в файл.
Как работает под капотом
При чтении R разбирает каждую строку по разделителю и пытается угадать тип колонки: если все значения похожи на числа — делает numeric, иначе оставляет текст. Поэтому колонка с пропусками, записанными как "N/A" или "-", неожиданно станет текстовой. Чтобы R понял такие метки как пропуски, ему передают na = c("", "NA", "N/A"). Кодировка — ещё одна частая засада: русский текст из Windows-файла иногда требует encoding = "UTF-8" или "CP1251".
Частые ошибки
- Неверный разделитель. Если Excel сохранил с
;, а вы читаетеread.csv, всё попадёт в одну колонку. Беритеread.csv2илиsep=";". - Кракозябры в кириллице. Укажите правильную кодировку при чтении.
- Относительный путь. Файл ищется относительно рабочей директории. Проверяйте её через
getwd().
Итог
- CSV — текстовая таблица со значениями через разделитель.
read.csv— базовое чтение,read.csv2/sep=";"— для точки с запятой.readr::read_csv— быстрее, удобнее, точнее с типами.- Следите за кодировкой и пометками пропусков.