7.2 Trattamento dei dati mancanti
Se una variabile contiene valori mancanti, R
non è in grado di applicare ad essa alcune Funzioni, come ad esempio la media. Per questa ragione, la gran parte delle funzioni di R
prevedono modi specifici per trattare i valori mancanti.
Ci sono diversi tipi di dati “mancanti” in R
;
NA
- generico dato mancante;NaN
- il codiceNaN
(Not a Number) indica i valori numerici impossibili, quali ad esempio un valore 0/0;Inf
e-Inf
- Infinity, si verifca, ad esempio, quando si divide un numero per 0.
La funzione is.na()
ritorna un output che indica con TRUE le celle che contengono NA o NaN.
Si noti che
- se
is.na(x)
è TRUE, allora!is.na(x)
è FALSE; all(!is.na(x))
ritorna TRUE se tutti i valorix
sono NOT NA;any(is.na(x))
risponde alla domanda: c’è qualche valore NA (almeno uno) inx
?;complete.cases(x)
ritorna TRUE se ciascun elemento dix
è is NOT NA; ritorna FALSE se almeno un elemento dix
è NA;
Le funzioni R
is.nan()
e is.infinite()
si applicano ai tipi di dati NaN
e Inf
.
Per esempio, consideriamo il seguente data.frame:
d <- tibble(
w = c(1, 2, NA, 3, NA),
x = 1:5,
y = 1,
z = x^2 + y,
q = c(3, NA, 5, 1, 4)
)
d
#> # A tibble: 5 × 5
#> w x y z q
#> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 1 1 1 2 3
#> 2 2 2 1 5 NA
#> 3 NA 3 1 10 5
#> 4 3 4 1 17 1
#> 5 NA 5 1 26 4
Per creare un nuovo Dataframe senza valori mancanti:
d_clean <- d[complete.cases(d), ]
d_clean
#> # A tibble: 2 × 5
#> w x y z q
#> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 1 1 1 2 3
#> 2 3 4 1 17 1
Oppure, se vogliamo eliminare le righe con NA solo in una variabile:
d1 <- d[!is.na(d$q), ]
d1
#> # A tibble: 4 × 5
#> w x y z q
#> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 1 1 1 2 3
#> 2 NA 3 1 10 5
#> 3 3 4 1 17 1
#> 4 NA 5 1 26 4
Se vogliamo esaminare le righe con i dati mancanti in qualunque colonna:
d_na <- d[!complete.cases(d), ]
d_na
#> # A tibble: 3 × 5
#> w x y z q
#> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 2 2 1 5 NA
#> 2 NA 3 1 10 5
#> 3 NA 5 1 26 4
Spesso i valori mancanti vengono sostiuti con valori “ragionevoli”, come ad esempio la media dei valori in quella colonna del Dataframe. Oppure, vengono considerati come “ragionevoli” i valori che vengono predetti conoscendo le altre variabili del Dataframe. Questa procedura si chiama imputazione multipla. Questo è però un argomento avanzato che non verrà trattato in questo insegnamento. La cosa più semplice da fare, in presenza di dati mancanti, è semplicemente quella di escludere tutte le righe nelle quali ci sono degli NAs.