Импортиране на данни в 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
  • . Txt
  • ...
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) връща „фактор“ по-горе. Можете да го изключите с 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() (помощни програми) read_csv() (четец)
Необходим пакет None четец
Скорост при работа с големи файлове По-бавно Няколко пъти по-бързо
Връщане data.frame дрънкане
Имена на колони Интервалите, преобразувани в точки Запазено точно както е написано
Откриване на тип Безшумен Отчита се в спецификация на колона
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"

Ако работният лист включва много листове, лесно е да изберете конкретен лист с помощта на аргументите на листа. Можем да посочим името на листа или индекса на листа. Можем да проверим дали и двете функции връщат един и същ резултат с identical().

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

Изход:

## [1] TRUE

Можем да контролираме кои клетки да четем по 2 начина

  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. Ако използваме диапазон = 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

Забележка: диапазон = 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.

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

Файлове от други статистически пакети се импортират с убежище пакет, който поддържа SAS, STATA и SPSS. Можем да използваме следната функция, за да отворим различни типове набори от данни, в зависимост от разширението на файла:

  • SAS: read_sas()
  • STATA: read_dta() (или read_stata(), които са идентични)
  • SPSS: read_sav() или read_por(). Трябва да проверим разширението

Всяка от тези функции се нуждае само от един аргумент - PATH, където се съхранява файлът, и всяка приема URL толкова лесно, колкото и местен път.

library(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, sep = “,”
readxl Прочетете EXCEL файл read_excel() път, диапазон = NULL, имена на_колони = TRUE
убежище Прочетете SAS файла read_sas() път
убежище Прочетете STATA файла read_dta() / read_stata() път
убежище Прочетете SPSS файл read_sav() път

Втората таблица показва начините за импортиране на селекция с read_excel():

функция Цел Аргументи
read_excel() Прочетете n на брой редове n_max = 10
Изберете редове и колони като в Excel диапазон = „A1:D10“
Изберете редове с индекси диапазон=клетки_редове(1:3)
Изберете колони с букви диапазон = cell_cols(“A:C”)

Въпроси и Отговори

R 4.0.0 промени стойността по подразбиране на stringsAsFactors от TRUE на FALSE. Колоните със символи вече остават символни. Предайте аргумента изрично, ако вашият скрипт трябва да се държи по същия начин в по-стари версии на R.

Сменете URL с пълния локален път в кавички, например „C:/Users/name/data.csv“. Използвайте наклонени черти напред или двойни обратни наклонени черти на Windowsи потвърдете работната директория с getwd().

readxl чете .xls и .xlsx в чист R без Java зависимост. Само по-старият xlsx пакет изисква Java чрез rJava, поради което readxl е препоръчителният избор.

Тихите промени в типа при импортиране са често срещан източник на невъзпроизводими резултати от изкуствения интелект. Декларирането на типовете колони изрично, докато read_csv() ги докладва, гарантира, че наборът от данни за обучение се зарежда идентично всеки път.

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

Обобщете тази публикация с: