Fattori in R
I fattori (factors) sono una struttura dati speciale di R progettata per rappresentare variabili categoriche, ovvero variabili che possono assumere un numero limitato e fisso di valori. Sono fondamentali nell’analisi statistica e nella creazione di grafici, poiché permettono a R di trattare i dati in modo appropriato nelle operazioni di modellazione e visualizzazione.
Creare un Fattore
Per creare un fattore si usa la funzione factor():
# Creare un fattore da un vettore di caratteri
colori <- c("rosso", "blu", "verde", "rosso", "blu", "rosso")
colori_f <- factor(colori)
print(colori_f)
# [1] rosso blu verde rosso blu rosso
# Levels: blu rosso verde
# R assegna automaticamente i livelli in ordine alfabetico
Livelli di un Fattore
I livelli (levels) rappresentano i valori unici che il fattore può assumere. Si possono consultare e personalizzare:
# Visualizzare i livelli
levels(colori_f)
# [1] "blu" "rosso" "verde"
# Creare un fattore con livelli personalizzati
taglia <- factor(
c("M", "L", "S", "XL", "M", "S"),
levels = c("S", "M", "L", "XL")
)
print(taglia)
# [1] M L S XL M S
# Levels: S M L XL
# Il numero di livelli
nlevels(taglia)
# [1] 4
Fattori Ordinati
Quando le categorie hanno un ordine naturale (come le taglie o i livelli di soddisfazione), si possono creare fattori ordinati con ordered = TRUE:
# Fattore ordinato per livello di soddisfazione
soddisfazione <- factor(
c("alto", "basso", "medio", "alto", "medio", "basso", "alto"),
levels = c("basso", "medio", "alto"),
ordered = TRUE
)
print(soddisfazione)
# [1] alto basso medio alto medio basso alto
# Levels: basso < medio < alto
# Con i fattori ordinati si possono fare confronti
soddisfazione[1] > soddisfazione[2]
# [1] TRUE
# Fattore ordinato per titolo di studio
titolo <- factor(
c("laurea", "diploma", "laurea", "dottorato", "diploma"),
levels = c("diploma", "laurea", "dottorato"),
ordered = TRUE
)
titolo[4] > titolo[2]
# [1] TRUE (dottorato > diploma)
Tabelle di Frequenza con table()
La funzione table() è particolarmente utile con i fattori per contare le occorrenze di ogni livello:
# Frequenze assolute
voti_lettera <- factor(
c("A", "B", "A", "C", "B", "A", "B", "A", "C", "B"),
levels = c("A", "B", "C", "D")
)
freq <- table(voti_lettera)
print(freq)
# voti_lettera
# A B C D
# 4 4 2 0
# Nota: il livello D appare con 0 perché è definito nei levels
# Frequenze relative (proporzioni)
prop.table(freq)
# voti_lettera
# A B C D
# 0.4 0.4 0.2 0.0
# Tabella di contingenza con due fattori
genere <- factor(c("M", "F", "M", "F", "M", "F", "M", "F", "M", "F"))
tab_incr <- table(genere, voti_lettera)
print(tab_incr)
# voti_lettera
# genere A B C D
# F 1 2 2 0
# M 3 2 0 0
Conversione tra Character e Factor
È frequente dover convertire tra stringhe e fattori:
# Da character a factor
citta_chr <- c("Roma", "Milano", "Roma", "Napoli", "Milano")
citta_f <- factor(citta_chr)
print(citta_f)
# [1] Roma Milano Roma Napoli Milano
# Levels: Milano Napoli Roma
# Da factor a character
citta_indietro <- as.character(citta_f)
print(citta_indietro)
# [1] "Roma" "Milano" "Roma" "Napoli" "Milano"
# Attenzione con i fattori numerici!
numeri_f <- factor(c(10, 20, 30, 10))
# SBAGLIATO: restituisce gli indici interni
as.numeric(numeri_f)
# [1] 2 3 4 2
# CORRETTO: prima convertire in character, poi in numerico
as.numeric(as.character(numeri_f))
# [1] 10 20 30 10
Fattori nei Data Frame
I fattori sono particolarmente utili all’interno dei data frame per rappresentare variabili categoriche:
# Data frame con fattori
dipendenti <- data.frame(
nome = c("Anna", "Bruno", "Carla", "Diego"),
reparto = factor(c("Vendite", "IT", "Vendite", "IT")),
livello = factor(c("junior", "senior", "senior", "junior"),
levels = c("junior", "mid", "senior"),
ordered = TRUE)
)
# Conteggio per reparto
table(dipendenti$reparto)
# IT Vendite
# 2 2
# Filtrare i senior
senior <- dipendenti[dipendenti$livello == "senior", ]
print(senior$nome)
# [1] "Bruno" "Carla"
Rinominare i Livelli
È possibile rinominare i livelli di un fattore per rendere i dati più leggibili:
stato <- factor(c(1, 2, 1, 3, 2, 1))
print(stato)
# [1] 1 2 1 3 2 1
# Levels: 1 2 3
# Rinominare i livelli
levels(stato) <- c("Attivo", "In pausa", "Chiuso")
print(stato)
# [1] Attivo In pausa Attivo Chiuso In pausa Attivo
# Levels: Attivo In pausa Chiuso
Conclusione
I fattori sono una componente essenziale di R che permette di gestire in modo efficiente le variabili categoriche. Comprendere la differenza tra fattori ordinati e non ordinati, saper utilizzare table() per le frequenze e padroneggiare le conversioni tra character e factor sono competenze indispensabili per l’analisi statistica e la creazione di grafici in R.