Импортируйте данные в R: читайте файлы CSV, Excel, SPSS, Stata, SAS.

⚡ Умное резюме

В этом руководстве рассматривается импорт данных в R, включая чтение CSV-файлов с помощью функции read.csv(), рабочих книг Excel с помощью readxl и файлов SAS, STATA или SPSS с помощью haven. Также показано, как точно выбирать листы, строки и диапазоны ячеек при импорте.

  • 📄 CSV-импорт: Функция read.csv(file, header = TRUE, sep = “,”) загружает файл, разделенный запятыми, из локального пути или из архива. URL.
  • ⚠️ Изменение версии: Начиная с версии R 4.0.0, символьные столбцы остаются символьными, поскольку параметр stringsAsFactors теперь по умолчанию имеет значение FALSE.
  • 📗 Импорт из Excel: Функция read_excel() из пакета readxl обрабатывает файлы .xls и .xlsx, а функция excel_sheets() сначала выводит список всех листов.
  • 🎯 Точный выбор: Параметр n_max ограничивает количество строк, параметр range принимает обозначения Excel, а функции cell_rows() или cell_cols() принимают индексы и буквы.
  • 🔄 Другое программное обеспечение: Haven предоставляет функции read_sas(), read_dta() и read_sav(), для каждой из которых требуется только путь или URL.
  • 🧹 Очистка ввода: Перед импортом закодируйте пропущенные значения как NA и избегайте пробелов или символов в названиях столбцов.

Импорт данных в R

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

Чтение CSV-файлов

Наиболее распространенный формат данных — .csv, значения, разделенные запятыми. R загружает множество библиотек при запуске, включая пакет utils. Этот пакет предоставляет функцию read.csv(), стандартный способ открытия CSV-файла. Вот синтаксис:

read.csv(file, header = TRUE, sep = ",")

Аргумент:

  • файл: ПУТЬ, в которой хранится файл.
  • заголовок: подтвердите, есть ли у файла заголовок или нет. По умолчанию для заголовка установлено значение TRUE.
  • сентябрь: символ, используемый для разделения переменной. По умолчанию `,`.

Мы прочитаем имя файла данных mtcats. CSV-файл хранится в Интернете. Если ваш файл .csv хранится локально, вы можете заменить PATH внутри фрагмента кода. Не забудьте обернуть его внутри ''. PATH должен быть строковым значением.

Для пользователя Mac путь к папке загрузки:

 "/Users/USERNAME/Downloads/FILENAME.csv"

Для пользователя Windows:

"C:\Users\USERNAME\Downloads\FILENAME.csv"

Обратите внимание: мы всегда должны указывать расширение имени файла.

  • . Csv
  • . XLSX
  • .текст
  • ...
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv'                
df <- read.csv(PATH, header =  TRUE, sep = ',')
length(df)

Выход:

## [1] 12
class(df$X)

Выход:

## [1] "factor"

В версиях R до 4.0.0 функция read.csv() преобразовывала каждый символьный столбец в фактор, поэтому в приведенном выше примере class(df$X) возвращает «factor». Вы можете отключить эту функцию, установив stringsAsFactors = FALSE.

⚠️ Примечание к версии: с R 4.0.0 По умолчанию stringsAsFactors = FALSE, поэтому символьные столбцы остаются символьными, и первый пример теперь возвращает «символьный» тип в современной установке. Явная передача аргумента, как показано ниже, дает тот же результат во всех версиях и является наиболее безопасным вариантом.

PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv'
df <-read.csv(PATH, header =TRUE, sep = ',', stringsAsFactors =FALSE)
class(df$X)

Выход:

## [1] "character"

Класс переменной X теперь является символом.

read.csv() или read_csv(): что лучше использовать?

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

Критерии read.csv() (utils) read_csv() (readr)
Необходимый пакет Ничто читатель
Скорость обработки больших файлов Помедленнее В несколько раз быстрее
Returns кадр данных тиббл
Имена столбцов Пробелы преобразованы в точки Сохранено в точности так, как написано.
Определение типа Тихий Указано в спецификации столбца.
library(readr)
df <- read_csv(PATH)

# For very large files, data.table::fread() is faster still
library(data.table)
df <- fread(PATH)

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

Чтение файлов Excel

Excel файлы очень популярны среди аналитиков данных. С электронными таблицами легко работать, они гибкие. R оснащен библиотекой readxl для импорта таблиц Excel.

Используйте этот код

require(readxl)

чтобы проверить, установлен ли readxl на вашем компьютере. Если вы устанавливаете r с помощью r-conda-essential, библиотека уже установлена. В командном окне вы должны увидеть:

Выход:

Loading required package: readxl.

Если пакет не установлен, вы можете установить его с помощью conda. библиотеки или в терминале используйте conda install -c mittner r-readxl.

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

library(readxl)

readxl_example()

В этом руководстве мы используем примеры, включенные в пакет readxl.

Используйте код

readxl_example()

чтобы просмотреть все доступные таблицы в библиотеке.

Readxl_Example

Чтобы проверить местоположение конкретной электронной таблицы, передайте её имя:

readxl_example("geometry.xls")

Readxl_Example

Если вы устанавливаете R с conda, электронные таблицы расположены в Anaconda3/lib/R/library/readxl/extdata/filename.xls.

read_excel ()

Функция read_excel() открывает файлы с расширениями .xls и .xlsx и автоматически выбирает подходящий парсер.

Синтаксис:

read_excel(PATH, sheet = NULL, range= NULL, col_names = TRUE)
arguments:
-PATH: Path where the excel is located
-sheet: Select the sheet to import. By default, all
-range: Select the range to import. By default, all non-null cells
-col_names: Select the columns to import. By default, all non-null columns

Мы можем импортировать таблицы из библиотеки readxl и посчитать количество столбцов на первом листе.

# Store the path of `datasets.xlsx`
example <- readxl_example("datasets.xlsx")
# Import the spreadsheet
df <- read_excel(example)
# Count the number of columns
length(df)

Выход:

## [1] 5

Excel_sheets()

Файл datasets.xlsx состоит из 4 листов. Мы можем узнать, какие листы доступны в книге, используя функцию excel_sheets().

example <- readxl_example("datasets.xlsx")

excel_sheets(example)

Выход:

[1] "iris"     "mtcars"   "chickwts" "quakes"

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

example <- readxl_example("datasets.xlsx")
quake <- read_excel(example, sheet = "quakes")
quake_1 <-read_excel(example, sheet = 4)
identical(quake, quake_1)

Выход:

## [1] TRUE

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

  1. Используйте аргумент n_max для возврата n строк
  2. Используйте аргумент диапазона в сочетании с cell_rows или cell_cols.

Например, мы установили n_max равным 5, чтобы импортировать первые пять строк.

# Read the first five row: with header
iris <-read_excel(example, n_max =5, col_names =TRUE)

Excel_Sheets

Если мы изменим col_names на FALSE, R автоматически создаст заголовки.

# Read the first five row: without header
iris_no_header <-read_excel(example, n_max =5, col_names =FALSE)

iris_no_header

В таблице данных iris_no_header функция readxl сгенерировала пять имен-заполнителей. Более старые версии выдавали имена от X__1 до X__5, а текущие — от …1 до …5.

Excel_Sheets

Мы также можем использовать диапазон аргументов для выбора строк и столбцов в электронной таблице. В приведенном ниже коде мы используем стиль Excel для выбора диапазона от A1 до B5.

# Read rows A1 to B5
example_1 <-read_excel(example, range = "A1:B5", col_names =TRUE)
dim(example_1)

Выход:

## [1] 4 2

Функция example_1 возвращает 4 строки и 2 столбца. Диапазон A1:B5 охватывает пять строк электронной таблицы, но первая используется в качестве заголовка, поэтому размерность составляет 4 на 2.

Excel_Sheets

Во втором примере мы используем функцию cell_rows(), которая управляет диапазоном возвращаемых строк. Если мы хотим импортировать строки с 1 по 5, мы можем установить cell_rows(1:5). Обратите внимание, что cell_rows(1:5) возвращает тот же результат, что и cell_rows(5:1).

# Read rows 1 to 5
example_2 <-read_excel(example, range =cell_rows(1:5),col_names =TRUE)			
dim(example_2)

Выход:

## [1] 4 5

В отличие от этого, example_2 имеет размер 4 на 5. Функция cell_rows(1:5) снова рассматривает первую строку как заголовок, поэтому возвращаются четыре строки данных по всем пяти столбцам.

Excel_Sheets

Если мы хотим импортировать строки, которые не начинаются с первой строки, нам необходимо включить col_names = FALSE. Если мы используем range = cell_rows(2:5), становится очевидно, что у нашего фрейма данных больше нет заголовка.

iris_row_with_header <-read_excel(example, range =cell_rows(2:3), col_names=TRUE)
iris_row_no_header <-read_excel(example, range =cell_rows(2:3),col_names =FALSE)

Excel_Sheets

Вы также можете выделять столбцы по буквам, точно так же, как в Excel:

# Select columns A and B
col <- read_excel(example, range = cell_cols("A:B"))
dim(col)

Выход:

## [1] 150   2

Примечание. range = cell_cols («A: B») возвращает все ячейки с ненулевым значением. Набор данных содержит 150 строк, поэтому read_excel() возвращает строки до 150. Это проверяется с помощью функции dim().

Аргумент `na` указывает функции `read_excel()`, какие значения следует считать отсутствующими. Подсчитайте их с помощью функций `sum()` и `is.na()`:

  1. сумма
  2. есть.на

Вот код

iris_na <-read_excel(example, na ="setosa")
sum(is.na(iris_na))

Выход:

## [1] 50

У нас отсутствует 50 значений, которые являются строками, принадлежащими виду Setosa.

Импорт данных из других статистических программ

Файлы из других статистических пакетов импортируются вместе с... убежище пакет, который поддерживает ПАВSTATA и SPSS. Для открытия наборов данных различных типов в зависимости от расширения файла можно использовать следующую функцию:

  • САС: read_sas()
  • STATA: read_dta() (или read_stata(), которые идентичны)
  • SPSS: read_sav() или read_por(). Нам нужно проверить расширение

Каждая из этих функций принимает только один аргумент — путь к файлу (PATH), и каждая из них принимает... URL так же легко, как и местная тропа.

library(haven)

Haven поставляется с Conda R-Essential, в противном случае перейдите к ссылка. или в терминале conda install -c conda-forge r-haven

Читать файлы SAS

В нашем примере мы собираемся использовать набор данных о приеме из IDRE.

PATH_sas <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sas7bdat?raw=true'
df <- read_sas(PATH_sas)
head(df)

Выход:

## # A tibble: 6 x 4
##   ADMIT   GRE   GPA  RANK
##   <dbl> <dbl> <dbl> <dbl>
## 1     0   380  3.61     3
## 2     1   660  3.67     3
## 3     1   800  4.00     1
## 4     1   640  3.19     4
## 5     0   520  2.93     4
## 6     1   760  3.00     2

Чтение файлов STATA

Для файлов данных STATA вы можете использовать read_dta(). Мы используем точно такой же набор данных, но храним его в файле .dta.

PATH_stata <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.dta?raw=true'
df <- read_dta(PATH_stata)
head(df)

Выход:

## # A tibble: 6 x 4				
##   admit   gre   gpa  rank				
##   <dbl> <dbl> <dbl> <dbl>				
## 1     0   380  3.61     3				
## 2     1   660  3.67     3				
## 3     1   800  4.00     1				
## 4     1   640  3.19     4				
## 5     0   520  2.93     4				
## 6     1   760  3.00     2

Прочтите файлы SPSS.

Функция read_sav() открывает файл SPSS с расширением .sav.

PATH_spss <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sav?raw=true'
df <- read_sav(PATH_spss)
head(df)

Выход:

## # A tibble: 6 x 4				
##   admit   gre   gpa  rank				
##   <dbl> <dbl> <dbl> <dbl>				
## 1     0   380  3.61     3				
## 2     1   660  3.67     3			
## 3     1   800  4.00     1				
## 4     1   640  3.19     4				
## 5     0   520  2.93     4				
## 6     1   760  3.00     2

лучшие практики импорта данных

Проверка по приведенному ниже контрольному списку перед импортом позволит сэкономить большую часть времени на последующей очистке:

  • Типичный формат электронной таблицы — использование первых строк в качестве заголовка (обычно имени переменной).
  • Избегайте пробелов в именах файлов или столбцов, поскольку они могут быть восприняты как разделитель столбцов. Вместо них используйте нижнее подчеркивание.
  • Короткие имена предпочтительны.
  • Не используйте символы в названии. Пишите exchange_rate_dollar_euro вместо exchange_rate_$_€.
  • Пропущенные значения следует кодировать как NA, а не как пробелы, тире или контрольные числа, такие как -99, которые в противном случае пришлось бы удалять впоследствии.

Импорт данных в R: Справочник по функциям

В таблице ниже указаны функции импорта для каждого типа файлов, библиотека, которая их предоставляет, и аргументы по умолчанию:

Библиотека Цель Функция Аргументы по умолчанию
Utils Чтение CSV-файла read.csv () файл, заголовок = TRUE, разделитель = "",
читатьxl Чтение файла EXCEL read_excel () путь, диапазон = NULL, имена столбцов = TRUE
убежище Чтение файла SAS read_sas() путь
убежище Чтение файла STATA read_dta() / read_stata() путь
убежище Прочитайте файл SPSS read_sav() путь

Во второй таблице показаны способы импорта выделенной области с помощью функции read_excel():

Функция Цель аргументы
read_excel () Прочитайте n количество строк п_макс = 10
Выделяйте строки и столбцы, как в Excel. диапазон = «A1:D10»
Выбрать строки с индексами диапазон = ячейки_строки (1:3)
Выбрать столбцы с буквами диапазон = cell_cols («A: C»)

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

В версии R 4.0.0 значение по умолчанию для параметра stringsAsFactors было изменено с TRUE на FALSE. Символьные столбцы теперь остаются символьными. Передайте аргумент явно, если ваш скрипт должен вести себя идентично в более старых версиях R.

Заменить URL Укажите полный локальный путь в кавычках, например, «C:/Users/name/data.csv». Используйте косые черты или двойные обратные косые черты. Windowsи подтвердите рабочий каталог с помощью функции getwd().

Функция readxl читает файлы .xls и .xlsx на чистом языке R без каких-либо дополнительных действий. Java зависимость. Только более старый пакет xlsx требует... Java через рJavaПоэтому рекомендуется использовать readxl.

Скрытые изменения типов при импорте являются распространенной причиной невоспроизводимых результатов ИИ. Явное указание типов столбцов, как их сообщает функция read_csv(), гарантирует, что обучающий набор данных будет загружаться одинаково каждый раз.

Да. Искусственный интеллект может диагностировать неправильные разделители, проблемы с кодировкой и неверное прочтение заголовков из сообщений об ошибках. Всегда подтверждайте результат с помощью функций str() или glimpse() перед продолжением анализа.

Подведем итог этой публикации следующим образом: