Importați date în R: Citiți fișiere CSV, Excel, SPSS, Stata, SAS

⚡ Rezumat inteligent

Importul datelor în R acoperă citirea fișierelor CSV cu read.csv(), a registrelor de lucru Excel cu readxl și a fișierelor SAS, STATA sau SPSS cu haven. Acest ghid prezintă, de asemenea, cum se selectează cu precizie foile de calcul, rândurile și intervalele de celule la import.

  • 📄 Import CSV: read.csv(file, header = TRUE, sep = “,”) încarcă un fișier separat prin virgulă dintr-o cale locală sau dintr-un URL.
  • ⚠️ Schimbare de versiune: Începând cu R 4.0.0, coloanele de caractere rămân caractere, deoarece stringsAsFactors are acum implicit valoarea FALSE.
  • 📗 Import Excel: read_excel() din readxl gestionează atât fișierele .xls, cât și .xlsx, iar excel_sheets() listează mai întâi fiecare foaie de calcul.
  • 🎯 Selecție precisă: `n_max` limitează rândurile, `range` ia notația Excel, iar `cell_rows()` sau `cell_cols()` ia indexuri și litere.
  • 🔄 Alte programe software: haven furnizează read_sas(), read_dta() și read_sav(), fiecare necesitând doar o cale sau URL.
  • 🧹 Intrare curată: Codificați valorile lipsă ca NA și evitați spațiile sau simbolurile din numele coloanelor înainte de import.

Importul datelor în R

Datele pot exista în diferite formate. Pentru fiecare format R are o funcție și un argument specific. Acest tutorial explică cum să importați date în R.

Citiți fișierele CSV

Cel mai utilizat format de date este .csv, cu valori separate prin virgulă. R încarcă o serie de biblioteci în timpul pornirii, inclusiv pachetul utils. Acest pachet oferă read.csv(), metoda standard de deschidere a unui fișier CSV. Iată sintaxa:

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

Argument:

  • fişier: PATH unde este stocat fișierul
  • antet: confirmați dacă fișierul are un antet sau nu, în mod implicit, antetul este setat la TRUE
  • sep: simbolul folosit pentru a împărți variabila. În mod implicit, `,`.

Vom citi numele fișierului de date mtcats. Fișierul csv este stocat online. Dacă fișierul dvs. .csv este stocat local, puteți înlocui PATH din fragmentul de cod. Nu uitați să-l înfășurați în interiorul " ". PATH trebuie să fie o valoare șir.

Pentru utilizatorul de Mac, calea pentru folderul de descărcare este:

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

Pentru utilizatorul Windows:

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

Rețineți că, ar trebui să specificăm întotdeauna extensia numelui fișierului.

  • .csv
  • .xlsx
  • .TXT
  • ...
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv'                
df <- read.csv(PATH, header =  TRUE, sep = ',')
length(df)

ieșire:

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

ieșire:

## [1] "factor"

În versiunile R anterioare versiunii 4.0.0, read.csv() convertea fiecare coloană de caractere într-un factor, motiv pentru care class(df$X) returnează „factor” mai sus. Ați putea dezactiva această funcție cu stringsAsFactors = FALSE.

⚠️ Notă privind versiunea: întrucât R 4.0.0 Valoarea implicită este stringsAsFactors = FALSE, deci coloanele de caractere rămân de tip caracter, iar primul exemplu returnează acum „caracter” pe o instalare modernă. Transmiterea explicită a argumentului, ca mai jos, dă același rezultat pe fiecare versiune și este cel mai sigur obicei.

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

ieșire:

## [1] "character"

Clasa pentru variabila X este acum un caracter.

read.csv() vs read_csv(): Pe care ar trebui să o utilizați?

read.csv() este livrată cu R de bază și nu necesită niciun pachet. Pachetul readr adaugă read_csv(), care este mai rapid și ia mai puține decizii în numele tău.

Criterii citește.csv() (utilități) read_csv() (readr)
Pachet necesar Nici unul cititor
Viteză pe fișiere mari Mai lent De câteva ori mai rapid
Returnări date.cadru tibble
Numele coloanelor Spațiile convertite în puncte Păstrat exact așa cum este scris
Detectarea tipului Tăcut Raportat într-o specificație de coloană
library(readr)
df <- read_csv(PATH)

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

Folosește read.csv() pentru fișiere mici și scripturi care trebuie să ruleze fără pachete suplimentare. Folosește read_csv() când fișierul este mare sau când este important să păstrezi numele exacte ale coloanelor.

Citirea fișierelor Excel

Excel fișierele sunt foarte populare în rândul analiștilor de date. Foile de calcul sunt ușor de lucrat și flexibile. R este echipat cu o bibliotecă readxl pentru a importa foi de calcul Excel.

Utilizați acest cod

require(readxl)

pentru a verifica dacă readxl este instalat în mașina dvs. Dacă instalați r cu r-conda-essential, biblioteca este deja instalată. Ar trebui să vedeți în fereastra de comandă:

ieșire:

Loading required package: readxl.

Dacă pachetul nu este instalat, îl puteți instala cu conda bibliotecă sau în terminal, utilizați conda install -c mittner r-readxl.

Utilizați următoarea comandă pentru a încărca biblioteca pentru a importa fișiere Excel.

library(readxl)

readxl_example()

Folosim exemplele incluse în pachetul readxl în timpul acestui tutorial.

Folosiți codul de

readxl_example()

pentru a vedea toate foile de calcul disponibile în bibliotecă.

Readxl_Example

Pentru a verifica locația unei anumite foi de calcul, transmiteți numele acesteia:

readxl_example("geometry.xls")

Readxl_Example

Dacă instalați R cu conda, foile de calcul se află în Anaconda3/lib/R/library/readxl/extdata/filename.xls

read_excel()

read_excel() deschide ambele extensii, .xls și .xlsx, și alege automat parserul corect.

Sintaxa este:

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

Putem importa foile de calcul din biblioteca readxl și numărăm numărul de coloane din prima foaie.

# 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)

ieșire:

## [1] 5

Excel_sheets()

Fișierul datasets.xlsx este compus din 4 foi. Putem afla ce foi sunt disponibile în registrul de lucru utilizând funcția excel_sheets().

example <- readxl_example("datasets.xlsx")

excel_sheets(example)

ieșire:

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

Dacă o foaie de lucru include multe foi, este ușor să selectați o anumită foaie folosind argumentele foii. Putem specifica numele foii sau indexul foii. Putem verifica dacă ambele funcții returnează aceeași ieșire cu identical().

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

ieșire:

## [1] TRUE

Putem controla ce celule să citim în 2 moduri

  1. Utilizați argumentul n_max pentru a returna n rânduri
  2. Utilizați argumentul interval combinat cu cell_rows sau cell_cols

De exemplu, setăm n_max egal cu 5 pentru a importa primele cinci rânduri.

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

Excel_sheets

Dacă schimbăm col_names în FALSE, R creează automat anteturile.

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

iris_no_header

În cadrul de date iris_no_header, readxl a generat cinci nume provizorii. Versiunile mai vechi au produs de la X__1 la X__5, în timp ce versiunile actuale produc de la …1 la …5.

Excel_sheets

De asemenea, putem folosi intervalul de argumente pentru a selecta rândurile și coloanele din foaia de calcul. În codul de mai jos, folosim stilul excel pentru a selecta intervalul de la A1 la B5.

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

ieșire:

## [1] 4 2

example_1 returnează 4 rânduri și 2 coloane. Intervalul A1:B5 acoperă cinci rânduri din foaia de calcul, dar primul este consumat ca antet, motiv pentru care dimensiunea este de 4 pe 2.

Excel_sheets

În al doilea exemplu, folosim funcția cell_rows() care controlează intervalul de rânduri de returnat. Dacă vrem să importam rândurile de la 1 la 5, putem seta cell_rows(1:5). Rețineți că, cell_rows(1:5) returnează aceeași ieșire ca 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)

ieșire:

## [1] 4 5

example_2, prin contrast, are dimensiunea de 4 pe 5. cell_rows(1:5) tratează din nou primul rând ca antet, astfel încât sunt returnate patru rânduri de date pe toate cele cinci coloane.

Excel_sheets

În cazul în care dorim să importam rânduri care nu încep la primul rând, trebuie să includem col_names = FALSE. Dacă folosim range = cell_rows(2:5), devine evident cadrul nostru de date nu mai are antet.

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

De asemenea, puteți selecta coloanele după literă, exact ca în Excel:

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

ieșire:

## [1] 150   2

Notă: interval = cell_cols(„A:B”), returnează toate celulele cu valoare non-nulă. Setul de date conține 150 de rânduri, prin urmare, read_excel() returnează rânduri până la 150. Acest lucru este verificat cu funcția dim().

Argumentul na îi spune lui read_excel() ce valori să trateze ca lipsă. Le numără cu sum() și is.na():

  1. sumă
  2. este.na

Iată codul

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

ieșire:

## [1] 50

Ne lipsesc 50 de valori, care sunt rândurile aparținând speciei setosa.

Importul datelor din alte programe software statistice

Fișierele din alte pachete statistice sunt importate cu refugiu pachet, care acceptă SAS, STATA și SPSS. Putem folosi următoarea funcție pentru a deschide diferite tipuri de seturi de date, în funcție de extensia fișierului:

  • SAS: read_sas()
  • STATA: read_dta() (sau read_stata(), care sunt identice)
  • SPSS: read_sav() sau read_por(). Trebuie să verificăm extensia

Fiecare dintre aceste funcții are nevoie de un singur argument, CALEA unde este stocat fișierul și fiecare acceptă un URL la fel de ușor ca o cale locală.

library(haven)

haven vine cu conda r-essential altfel du-te la legătură sau în terminalul conda install -c conda-forge r-haven

Citirea fișierelor SAS

Pentru exemplul nostru, vom folosi setul de date de admitere de la IDRE.

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

ieșire:

## # 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

Citirea fișierelor STATA

Pentru fișierele de date STATA puteți utiliza read_dta(). Folosim exact același set de date, dar stocăm în fișierul .dta.

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

ieșire:

## # 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

Citirea fișierelor SPSS

Funcția read_sav() deschide un fișier SPSS, care are extensia .sav.

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

ieșire:

## # 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

Cele mai bune practici pentru importul de date

Parcurgerea listei de verificare de mai jos înainte de import scutește de cea mai mare parte a muncii de curățare ulterioare:

  • Formatul tipic pentru o foaie de calcul este utilizarea primelor rânduri ca antet (de obicei, numele variabilelor).
  • Evitați spațiile goale într-un nume de fișier sau de coloană, deoarece acestea pot fi citite ca separator de coloane. Folosiți în schimb un caracter de subliniere.
  • Sunt de preferat numele scurte
  • Nu folosiți simboluri în nume. Scrieți curs_de_schimb_dolar_euro în loc de curs_de_schimb_$_€.
  • Codificați valorile lipsă ca NA, mai degrabă decât ca spații libere, cratime sau numere santinelă, cum ar fi -99, care altfel ar trebui curățate ulterior.

Importul datelor în R: Referință funcții

Tabelul de mai jos listează funcția de import pentru fiecare tip de fișier, biblioteca care o furnizează și argumentele sale implicite:

Bibliotecă Obiectiv Funcţie Argumente implicite
utils Citiți fișierul CSV read.csv() fișier, antet = TRUE, sep = „,”
readxl Citiți fișierul EXCEL read_excel() cale, interval = NULL, col_names = TRUE
refugiu Citiți fișierul SAS read_sas() cale
refugiu Citiți fișierul STATA citește_dta() / citește_stat() cale
refugiu Citiți fișierul SPSS read_sav() cale

Al doilea tabel arată modalitățile de importare a unei selecții cu read_excel():

Funcţie Obiectiv Argumente
read_excel() Citiți n număr de rânduri n_max = 10
Selectați rânduri și coloane ca în excel interval = „A1:D10”
Selectați rânduri cu indici interval= rânduri_celule(1:3)
Selectați coloanele cu litere interval = cell_cols(„A:C”)

Întrebări frecvente

R 4.0.0 a schimbat valoarea implicită a parametrului stringsAsFactors de la TRUE la FALSE. Coloanele de caractere rămân acum caractere. Transmiteți argumentul explicit dacă scriptul trebuie să se comporte identic pe versiunile mai vechi de R.

Inlocuieste URL cu calea locală completă între ghilimele, cum ar fi „C:/Utilizatori/nume/date.csv”. Folosiți bare oblice înainte sau bare oblice inversate duble pe Windowsși confirmați directorul de lucru cu getwd().

readxl citește fișiere .xls și .xlsx în R pur, fără Java dependență. Doar pachetul xlsx mai vechi necesită Java prin rJava, motiv pentru care readxl este alegerea recomandată.

Modificările silențioase de tip la import sunt o sursă comună de rezultate ireproductibile ale inteligenței artificiale. Declararea explicită a tipurilor de coloane, așa cum le raportează read_csv(), asigură încărcarea identică a unui set de date de antrenament de fiecare dată.

Da. Asistenții inteligenți artificiali pot diagnostica separatoarele greșite, problemele de codificare și anteturile citite greșit dintr-un mesaj de eroare. Confirmați întotdeauna rezultatul cu str() sau glimpse() înainte de a continua analiza.

Rezumați această postare cu: