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

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.