R Academy · Урок

Чтение CSV-файлов с помощью read_csv()

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

Урок 1 из 413 шагов

«Чтение CSV-файлов с помощью read_csv()» — бесплатный урок R Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.

Почему readr, а не базовый R?

В базовом R есть read.csv(), но функция read_csv() из пакета readr работает быстрее, возвращает тиббл (а не таблицу данных), лучше определяет типы по умолчанию и выводит информативные сообщения о типах столбцов, которые она обнаружила.

library(readr)

# read_csv() vs read.csv():
# 1. Returns a tibble (prints nicely, faster subsetting)
# 2. Does NOT convert strings to factors by default
# 3. Shows column specification message
# 4. Faster for large files

# Example with a simple inline CSV:
df <- read_csv('name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C')

print(df)
print(class(df))

read_csv() с путём к файлу

Самый распространённый способ использования — передать в read_csv() строку с путём к файлу. Функция автоматически определяет в качестве разделителя запятую, считывает первую строку как заголовки и определяет типы столбцов по первым 1000 строкам.

library(readr)

# Reading from a file path (illustrative — file not present)
# df <- read_csv('data/sales_2024.csv')

# Reading from a URL also works:
# df <- read_csv('https://example.com/data.csv')

# Using a literal inline string for demonstration:
df <- read_csv('region,q1,q2,q3
East,100,120,115
West,200,195,210
North,80,85,90')

print(df)

col_types — указание типов столбцов

Используйте col_types, чтобы переопределить определение типов в readr. Передайте компактную строку (по одному символу на столбец: c=строковый, d=вещественный, i=целочисленный, l=логический, D=дата, _=пропустить) или спецификацию cols().

library(readr)

df <- read_csv('id,date,amount,active
1,2024-01-15,99.99,TRUE
2,2024-02-20,149.50,FALSE
3,2024-03-10,75.00,TRUE',
# Compact: integer, Date, double, logical
col_types = 'iDdl')

print(df)
cat('\nColumn types:\n')
print(sapply(df, class))

cols() для явного задания типов

Для более точного управления используйте cols(), чтобы указать тип каждого столбца. Используйте функции-сборщики: col_double(), col_character(), col_integer(), col_date(format=), col_skip() и col_guess().

library(readr)

df <- read_csv('id,name,score,date
1,Alice,85.5,2024-01-15
2,Bob,92.0,2024-02-20
3,Carol,78.3,2024-03-10',
col_types = cols(
  id = col_integer(),
  name = col_character(),
  score = col_double(),
  date = col_date(format = '%Y-%m-%d')
))

print(df)
print(class(df$date))

Аргументы skip и n_max

skip=n пропускает первые n строк перед считыванием (это удобно для метаданных или заголовков с комментариями). n_max=n считывает не более n строк данных — идеально для предварительного просмотра больших файлов или загрузки только первого фрагмента.

library(readr)

# File with metadata in first 2 lines
# (simulated with literal string)
df <- read_csv('# Generated 2024-01-15
# Source: internal DB
name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C
Dave,88,B',
skip = 2,     # Skip the 2 comment lines
n_max = 3     # Read only 3 data rows
)

print(df)

Аргумент na — задание пропущенных значений

По умолчанию read_csv() считает пустые строки и NA пропущенными значениями. Используйте аргумент na, чтобы указать дополнительные строки, которые следует считывать как NA. Распространённые примеры: 'N/A', 'NULL', '-999', '.'.

library(readr)

df <- read_csv('name,score,city
Alice,85,NYC
Bob,N/A,NULL
Carol,78,.
Dave,-999,Chicago',
na = c('', 'NA', 'N/A', 'NULL', '.', '-999')
)

print(df)
cat('NAs per column:\n')
print(colSums(is.na(df)))

col_names — пользовательские имена столбцов

Установите col_names = FALSE, если в файле нет строки заголовков: readr автоматически назовёт столбцы X1, X2 и так далее. Другой вариант — передать в col_names строковый вектор, чтобы задать собственные имена и пропустить строку заголовков.

library(readr)

# File without headers
df <- read_csv('Alice,85,NYC
Bob,92,LA
Carol,78,Chicago',
col_names = c('name','score','city')
)

print(df)

# auto-names when no header:
df2 <- read_csv('1,2,3
4,5,6', col_names = FALSE)
print(df2)

locale() — обработка нестандартных форматов

locale() управляет тем, как readr интерпретирует форматы, зависящие от локали: десятичные разделители (',' в европейских данных), форматы дат, кодировку и разделители групп разрядов. Передайте его в read_csv(locale=...).

library(readr)

# European-style CSV: semicolons as delimiters, comma as decimal
# read_csv2() is shorthand for this locale
df <- read_csv2('name;price;qty
Alice;9,99;100
Bob;24,50;50',
locale = locale(decimal_mark=',')
)

print(df)

# For dates in non-ISO format:
parse_date('15/01/2024', format='%d/%m/%Y')

progress и show_col_types

Для больших файлов read_csv() показывает индикатор выполнения. Установите progress=FALSE, чтобы отключить его (это удобно в скриптах). Параметр show_col_types=FALSE отключает сообщение о типах столбцов, если вы уже проверили их.

library(readr)

# Suppress progress and type messages for production scripts
df <- read_csv(
  'a,b,c
  1,x,TRUE
  2,y,FALSE',
  show_col_types = FALSE,
  progress = FALSE
)

print(df)

Problems() — диагностика ошибок разбора

Если readr встречает значения, не соответствующие ожидаемому типу, он заменяет их на NA и записывает предупреждение. Вызовите problems(df), чтобы точно определить, в каких строках и столбцах возникли проблемы и каковы были исходные значения.

library(readr)

# Intentional type mismatch: 'N/A' in numeric column
df <- suppressWarnings(read_csv(
  'id,score
  1,85
  2,N/A
  3,92',
  col_types = cols(score = col_double())
))

print(df)
print(problems(df))

Считывание нескольких файлов с помощью map()

Объедините readr с purrr::map(), чтобы за один шаг считать и объединить по строкам несколько CSV-файлов. Этот шаблон необходим для обработки помесячных или поквартальных данных, хранящихся в отдельных файлах.

library(readr)
library(purrr)
library(dplyr)

# Simulated: read and bind multiple CSV files
files <- c('q1.csv', 'q2.csv', 'q3.csv')

# In practice:
# all_data <- map_df(files, read_csv, show_col_types=FALSE)

# Demonstration with inline data:
q1 <- read_csv('month,sales\nJan,100\nFeb,120', show_col_types=FALSE)
q2 <- read_csv('month,sales\nApr,130\nMay,145', show_col_types=FALSE)

bind_rows(list(q1=q1, q2=q2), .id='quarter')

Быстрая проверка

Как сообщить read_csv(), что значения 'N/A' и '-99' следует считать пропущенными (NA)?

Итоги: read_csv() и readr

Главное о считывании CSV-файлов с помощью readr:

  • read_csv('file.csv') — считывает CSV, возвращает тиббл и определяет типы столбцов
  • col_types = 'idcl' или cols(x=col_double()) — явное задание типов
  • skip=n — пропустить строки заголовка или метаданных; n_max=n — ограничить число считываемых строк
  • na = c('N/A','NULL') — считать дополнительные строки значениями NA
  • locale(decimal_mark=',') — обработка европейских форматов чисел
  • show_col_types=FALSE — отключить сведения о типах в скриптах
  • problems(df) — просмотр ошибок разбора
  • Объединяйте с map_df(files, read_csv) для работы с несколькими файлами
library(readr)

# Production-ready read_csv() call
df <- read_csv(
  'name,score,city,active
  Alice,85,NYC,TRUE
  Bob,N/A,LA,FALSE
  Carol,78,NULL,TRUE',
  col_types = cols(
    name = col_character(),
    score = col_double(),
    city = col_character(),
    active = col_logical()
  ),
  na = c('', 'NA', 'N/A', 'NULL'),
  show_col_types = FALSE
)

print(df)
Можно начать бесплатно

Изучай R с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
43
Уроки
159

Часто задаваемые вопросы

Урок «Чтение CSV-файлов с помощью read_csv()» бесплатный?

Да — полный текст урока «Чтение CSV-файлов с помощью read_csv()» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.

Чему я научусь в уроке «Чтение CSV-файлов с помощью read_csv()»?

Импортируйте файлы с разделителями, используя определение типов столбцов, пропуск строк и параметры кодировки. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать R Academy?

Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Чтение CSV-файлов с помощью read_csv()»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке R Academy?

Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение CSV-файлов с помощью read_csv()
  2. Разбор TSV-файлов и файлов фиксированной ширины
  3. Импорт Excel-файлов с помощью readxl
  4. Запись данных в разных форматах
← Назад к R Academy