Corso
Sebbene molte organizzazioni archivino i dati in database e in soluzioni come AWS, Azure e GCP, i fogli di calcolo Microsoft Excel continuano a essere ampiamente usati per archiviare dataset più piccoli.
Le funzionalità per la data science di Excel sono più limitate rispetto a quelle di R, quindi è utile poter importare i dati dai fogli di calcolo in R.
In questo tutorial vedremo come leggere fogli di lavoro di Excel (nonché righe e colonne specifiche) in R usando il pacchetto readxl.
Per seguire, ti serve una conoscenza di base operativa di R.
Per una guida più generale all'importazione di diversi tipi di file in R, leggi How to Import Data Into R: A Tutorial.
Il file Excel
Il dataset che leggeremo in R è piccolo, con solo due fogli, per mostrare come specificare quale foglio leggere. Lo trovi qui.
Il primo foglio è un dataset di marketing bancario con 45.211 righe e 17 colonne. Lo screenshot qui sotto proviene dal file excel “sample.xlsx” e dal foglio “bank-full”.

Il secondo foglio è il dataset Iris con 150 righe e 6 colonne e contiene informazioni sui tipi di fiore Iris, come la lunghezza e la larghezza di sepali e petali. Lo screenshot qui sotto proviene dallo stesso file excel, “sample.xlsx”, e dal foglio “iris”.

Panoramica dei pacchetti
Questo tutorial usa il pacchetto readxl. Il pacchetto openxlsx è una valida alternativa che include anche la possibilità di scrivere file XLSX, ma ha un'integrazione meno stretta con i pacchetti del tidyverse come dplyr e tidyr.
Per leggere file Excel con il pacchetto readxl, dobbiamo prima installarlo e poi importarlo usando la funzione “library”.
install.packages("readxl")
Vedrai il seguente output nella console, a indicare che l'installazione è andata a buon fine.
trying URL 'https://cran.rstudio.com/bin/macosx/big-sur-arm64/contrib/4.2/readxl_1.4.2.tgz'
Content type 'application/x-gzip' length 1545782 bytes (1.5 MB)
==================================================
downloaded 1.5 MB
The downloaded binary packages are in
/var/folders/mq/46mc_8tj06n0wh2xjkk08r140000gn/T//RtmpHIGYqM/downloaded_packages
Per usare i metodi di “readxl”, esegui il comando qui sotto nella console di R.
library(readxl)
Nota che openxlsx è un'altra buona alternativa per scrivere file XLSX.
Lettura del primo foglio di lavoro
Leggiamo tutti i dati del primo foglio, “bank-full”, con read_xlsx() usando solo l'argomento path.
bank_df <- read_xlsx(path = "sample.xlsx")
Il risultato è una tibble.

Puoi anche usare read_excel() nello stesso modo di read_xlsx(), e tutti gli argomenti che vedrai nelle prossime sezioni funzionano in modo simile con questa funzione. read_excel() proverà a indovinare se hai un foglio di calcolo XLSX o il tipo più vecchio XLS.
bank_df <- read_excel(path = "sample.xlsx")

Lettura di altri fogli
Ora leggiamo tutti i dati del secondo foglio, cioè “iris”, con la funzione read_xlsx() e l'argomento sheet.
iris <- read_xlsx("sample.xlsx", sheet = "iris")

Puoi anche specificare il numero del foglio nell'argomento sheet invece del nome del foglio.
iris2 <- read_xlsx("sample.xlsx", sheet = 1)

Lettura di righe specifiche
Leggiamo righe specifiche da un foglio impostando gli argomenti skip e n_max. Per saltare le prime righe, puoi usare l'argomento skip con un valore pari al numero di righe da saltare.
bank_df_s2 <- read_excel("sample.xlsx", sheet = "bank-full", skip = 2)
Nota che il codice sopra salta anche le intestazioni. Imparerai come specificare esplicitamente le intestazioni nella funzione read_xlsx() nelle sezioni successive.

Allo stesso modo, per leggere le prime n righe, specifica l'argomento n_max nella funzione read_xlsx(). Il codice qui sotto legge le prime 1000 righe del foglio “bank-full”.
bank_df_n1k <- read_excel("sample.xlsx", sheet = "bank-full", n_max = 1000)

Puoi anche combinare entrambi gli argomenti per saltare alcune righe e leggere un numero specifico di righe dal dataset rimanente.
Lettura di celle specifiche
Gli argomenti “skip” e “n_max” ti consentono di leggere un sottoinsieme di righe dei dati; puoi leggere celle specifiche da un foglio impostando l'argomento range.
Ci sono due notazioni per specificare il sottoinsieme del dataset:
- Notazione A1 (E4:G8) - A rappresenta la colonna e 1 rappresenta il numero di riga.
- Notazione R1C1 (R4C5:R8C7) - Numero di riga e di colonna sono definiti esplicitamente
L'idea è specificare le coordinate del rettangolo che vuoi ritagliare dal dataset.
Notazione 1:
bank_df_range1 <- read_excel("sample.xlsx", sheet = "bank-full", range = "A3:E10")
Notazione 2:
bank_df_range2 <- read_excel("sample.xlsx", sheet = "bank-full",
range = "R3C1:R10C5")
Range consente anche di includere il nome del foglio nell'argomento (esempio: wbook!E4:G8).
bank_df_range3 <- read_excel("sample.xlsx", range = "bank-full!R3C1:R10C5")
Lettura di dati senza riga di intestazione
Leggiamo dati che non hanno una riga di intestazione impostando l'argomento col_names su un vettore di caratteri.
PS: Stiamo usando prima l'argomento skip per rimuovere la riga di intestazione.
columns <- c("ID", "Sepal Length", "Sepal Width", "Petal Length", "Petal Width", "Species Name")
iris3 <- read_excel("sample.xlsx", sheet = 2, skip = 1, col_names = columns)

Correzione dei nomi delle intestazioni
Nell'ultima sezione, le intestazioni che abbiamo specificato erano separate da spazi. Puoi trasformare i nomi delle intestazioni in variabili sintattiche R con l'argomento .name_repair = "universal".
iris4 <- read_excel("sample.xlsx", sheet = 2, skip = 1,
col_names = columns, .name_repair = "universal")

Specificare i tipi di colonna
Per impostazione predefinita, quando leggi un file excel, R cerca di indovinare il tipo di dato di ogni variabile. Osserviamo i tipi di colonna del dataset iris letto con gli argomenti predefiniti.
sapply(iris, class)
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
"numeric" "numeric" "numeric" "numeric" "numeric" "character"
Per sovrascrivere i tipi di colonna dedotti, puoi usare l'argomento col_types.
iris5 <- read_excel("sample.xlsx", sheet = 2,
col_types = c("numeric", "numeric", "numeric", "numeric", "numeric", "text"))
sapply(iris5, class)
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
"numeric" "numeric" "numeric" "numeric" "numeric" "character"

Puoi anche lasciare che R indovini i tipi di colonna di alcune variabili specificando il valore “guess” in col_types per una determinata colonna.
iris6 <- read_excel("sample.xlsx", sheet = 2,
col_types = c("guess", "numeric", "numeric", "numeric", "numeric", "text"))
sapply(iris6, class)
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
"numeric" "numeric" "numeric" "numeric" "numeric" "character"

Saltare colonne
Si sente spesso dire che più dati ci sono, meglio è. Ma in molti casi d'uso scopri che alcune variabili/colonne non contengono alcun segnale, per uno qualsiasi dei motivi seguenti.
- alta cardinalità: quasi ogni valore è diverso
- cardinalità zero: ogni valore è uguale
- non correlate al caso d'uso aziendale
- troppi valori mancanti
- troppi valori spuri
Puoi evitare di leggere alcune colonne impostando col_types su "skip" come mostrato di seguito.
iris7 <- read_excel("sample.xlsx", sheet = 2,
col_types = c("numeric", "skip", "skip", "numeric", "numeric", "text"))
sapply(iris7, class)
Fai un passo in più
In un mondo in cui i dati vengono generati a un ritmo enorme e in forme diverse, il tuo linguaggio di programmazione deve supportarne la lettura. R è uno di quei linguaggi potenti che supportano questo obiettivo. Iscriviti al corso “Introduction to Importing Data in R” per imparare come R offre pacchetti per importare dataset di vario tipo. Questo corso offre tutorial e quiz per rafforzare la tua comprensione dell'importazione dei dati in R.
Domande frequenti
R può importare sia dati CSV che Excel per i progetti?
Sì, R può importare sia dati CSV che Excel per i progetti, e R offre pacchetti e funzioni robuste per gestire entrambi i formati. Leggi la nostra guida su CSV vs. Excel per un confronto dettagliato e consigli su come fare la scelta giusta per i tuoi progetti dati.

