00
:
00
:
00
:
00
Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

Data Frame in R

I Data Frame sono la struttura dati fondamentale di R per lavorare con dati tabellari. Un data frame è essenzialmente una tabella dove ogni colonna rappresenta una variabile e ogni riga un’osservazione. È la struttura più utilizzata in analisi dei dati, statistica e data science con R.

Creare un Data Frame

Per creare un data frame si usa la funzione data.frame():

# Creare un data frame con dati di studenti
studenti <- data.frame(
  nome = c("Marco", "Laura", "Giovanni", "Sara", "Luca"),
  eta = c(22, 25, 23, 21, 24),
  voto = c(28, 30, 25, 27, 29),
  superato = c(TRUE, TRUE, TRUE, TRUE, TRUE)
)

print(studenti)
#       nome eta voto superato
# 1    Marco  22   28     TRUE
# 2    Laura  25   30     TRUE
# 3 Giovanni  23   25     TRUE
# 4     Sara  21   27     TRUE
# 5     Luca  24   29     TRUE

Esplorare un Data Frame

R offre diverse funzioni per esplorare la struttura e il contenuto di un data frame:

# Struttura del data frame
str(studenti)
# 'data.frame':	5 obs. of  4 variables:
#  $ nome    : chr  "Marco" "Laura" "Giovanni" "Sara" ...
#  $ eta     : num  22 25 23 21 24
#  $ voto    : num  28 30 25 27 29
#  $ superato: logi  TRUE TRUE TRUE TRUE TRUE

# Riepilogo statistico
summary(studenti)
#     nome                eta            voto        superato
#  Length:5           Min.   :21.0   Min.   :25.0   Mode:logical
#  Class :character   1st Qu.:22.0   1st Qu.:27.0   TRUE:5
#  Mode  :character   Median :23.0   Median :28.0
#                     Mean   :23.0   Mean   :27.8
#                     3rd Qu.:24.0   3rd Qu.:29.0
#                     Max.   :25.0   Max.   :30.0

# Prime e ultime righe
head(studenti, 3)
#     nome eta voto superato
# 1  Marco  22   28     TRUE
# 2  Laura  25   30     TRUE
# 3 Giovanni 23  25     TRUE

tail(studenti, 2)
#   nome eta voto superato
# 4 Sara  21   27     TRUE
# 5 Luca  24   29     TRUE

# Dimensioni del data frame
nrow(studenti)  # 5 (numero di righe)
ncol(studenti)  # 4 (numero di colonne)
dim(studenti)   # 5 4

# Nomi delle colonne
names(studenti)
# [1] "nome"     "eta"      "voto"     "superato"

Accedere ai Dati

Esistono diversi modi per accedere ai dati di un data frame:

# Accesso con $ (restituisce un vettore)
studenti$nome
# [1] "Marco"    "Laura"    "Giovanni" "Sara"     "Luca"

# Accesso con [riga, colonna]
studenti[1, 2]    # Riga 1, Colonna 2 -> 22
studenti[3, ]     # Tutta la riga 3
studenti[, 2]     # Tutta la colonna 2 (eta)

# Accesso con [[ ]] (singola colonna come vettore)
studenti[["voto"]]
# [1] 28 30 25 27 29

# Accesso a più righe e colonne
studenti[1:3, c("nome", "voto")]
#       nome voto
# 1    Marco   28
# 2    Laura   30
# 3 Giovanni   25

Aggiungere e Modificare Colonne

È semplice aggiungere nuove colonne o modificare quelle esistenti:

# Aggiungere una nuova colonna
studenti$citta <- c("Roma", "Milano", "Napoli", "Torino", "Bologna")

# Aggiungere una colonna calcolata
studenti$voto_normalizzato <- studenti$voto / 30 * 100

print(studenti[, c("nome", "voto", "voto_normalizzato")])
#       nome voto voto_normalizzato
# 1    Marco   28          93.33333
# 2    Laura   30         100.00000
# 3 Giovanni   25          83.33333
# 4     Sara   27          90.00000
# 5     Luca   29          96.66667

Filtrare Righe

Il filtraggio delle righe permette di selezionare osservazioni che soddisfano condizioni specifiche:

# Filtrare studenti con voto >= 28
bravi <- studenti[studenti$voto >= 28, ]
print(bravi$nome)
# [1] "Marco" "Laura" "Luca"

# Filtrare con condizioni multiple
risultato <- studenti[studenti$eta > 22 & studenti$voto >= 28, ]
print(risultato)
#    nome eta voto superato  citta voto_normalizzato
# 2 Laura  25   30     TRUE Milano               100
# 5  Luca  24   29     TRUE Bologna           96.667

# Usare subset() per un filtraggio più leggibile
giovani_bravi <- subset(studenti, eta <= 23 & voto >= 27)
print(giovani_bravi[, c("nome", "eta", "voto")])
#       nome eta voto
# 1    Marco  22   28

Unire Data Frame con merge()

La funzione merge() permette di eseguire operazioni di join tra due data frame, in modo simile ai JOIN di SQL:

# Creare un secondo data frame
esami <- data.frame(
  nome = c("Marco", "Laura", "Giovanni", "Sara", "Luca"),
  materia = c("Statistica", "Algebra", "Analisi", "Fisica", "Informatica")
)

borse <- data.frame(
  nome = c("Laura", "Luca", "Elena"),
  importo = c(2000, 1500, 1800)
)

# Inner join: solo studenti presenti in entrambi
inner <- merge(studenti, borse, by = "nome")
print(inner[, c("nome", "voto", "importo")])
#    nome voto importo
# 1 Laura   30    2000
# 2  Luca   29    1500

# Left join: tutti gli studenti, anche senza borsa
tutti <- merge(studenti, borse, by = "nome", all.x = TRUE)
print(tutti[, c("nome", "voto", "importo")])
#       nome voto importo
# 1 Giovanni   25      NA
# 2    Laura   30    2000
# 3     Luca   29    1500
# 4    Marco   28      NA
# 5     Sara   27      NA

Ordinare un Data Frame

Per ordinare un data frame si usa la funzione order():

# Ordinare per voto decrescente
studenti_ord <- studenti[order(studenti$voto, decreasing = TRUE), ]
print(studenti_ord[, c("nome", "voto")])
#       nome voto
# 2    Laura   30
# 5     Luca   29
# 1    Marco   28
# 4     Sara   27
# 3 Giovanni   25

Conclusione

I data frame sono la pietra angolare dell’analisi dei dati in R. Padroneggiare la creazione, l’accesso, il filtraggio e l’unione dei data frame è essenziale per qualsiasi progetto di data science. Le funzioni str(), summary(), subset() e merge() sono strumenti quotidiani per ogni programmatore R. Nelle prossime guide approfondiremo la manipolazione avanzata dei dati con pacchetti come dplyr e tidyr.