5.3 Dati categoriali in R

Consideriamo una variabile che descrive il genere e include le categorie male, female e non-conforming. In R, ci sono due modi per memorizzare queste informazioni. Uno è usare la classe character strings e l’altro è usare la classe factor. Non ci addentrimo qui nelle sottigliezze di questa distinzione, motivata in gran parte per le necessità della programmazione con le funzioni di tidyverse. Per gli scopi di questo insegnamento sarà sufficiente codificare le variabili qualitative usando la classe factor. Una volta codificati i dati qualitativi utilizzando la classe factor, si pongono spesso due problemi:

  1. modificare le etichette dei livelli (ovvero, le modalità) di un fattore,
  2. riordinare i livelli di un fattore.

5.3.1 Modificare le etichette dei livelli di un fattore

Esaminiamo l’esempio seguente.

f_1 <- c("old_3", "old_4", "old_1", "old_1", "old_2")
f_1 <- factor(f_1)
y <- 1:5
df <- tibble(f_1, y)
df
#> # A tibble: 5 × 2
#>   f_1       y
#>   <fct> <int>
#> 1 old_3     1
#> 2 old_4     2
#> 3 old_1     3
#> 4 old_1     4
#> 5 old_2     5

Supponiamo ora di volere che i livelli del fattore f_1 abbiano le etichette new_1, new_2, ecc. Per ottenere questo risultato usiamo la funzione forcats::fct_recode():

df <- df %>%
  mutate(
    f_1 =
      forcats::fct_recode(
        f_1,
        "new_poco" = "old_1",
        "new_medio" = "old_2",
        "new_tanto" = "old_3",
        "new_massimo" = "old_4"
      )
  )
df
#> # A tibble: 5 × 2
#>   f_1             y
#>   <fct>       <int>
#> 1 new_tanto       1
#> 2 new_massimo     2
#> 3 new_poco        3
#> 4 new_poco        4
#> 5 new_medio       5

5.3.2 Riordinare i livelli di un fattore

Spesso i livelli dei fattori hanno un ordinamento naturale. Quindi, gli utenti devono avere un modo per imporre l’ordine desiderato sulla codifica delle loro variabili qualitative. Se per qualche motivo vogliamo ordinare i livelli f_1 in ordine inverso, ad esempio, possiamo procedere nel modo seguente.

df$f_1 <- factor(df$f_1,
  levels = c(
    "new_massimo", "new_tanto", "new_medio", "new_poco"
  )
)
summary(df$f_1)
#> new_massimo   new_tanto   new_medio    new_poco 
#>           1           1           1           2

Per approfondire le problematiche della manipolazione di variabili qualitative in R, si veda McNamara and Horton (2018).

References

McNamara, Amelia, and Nicholas J Horton. 2018. “Wrangling Categorical Data in r.” The American Statistician 72 (1): 97–104.