Come sostituire na con la mediana in r
È possibile utilizzare i seguenti metodi per sostituire i valori NA con la mediana utilizzando le funzioni dei pacchetti dplyr e Tidyr in R:
Metodo 1: sostituisci i valori NA con la mediana in una colonna
df %>% mutate(across(col1, ~replace_na(., median(., na. rm = TRUE ))))
Metodo 2: sostituire i valori NA con la mediana in più colonne
df %>% mutate(across(c(col1, col2), ~replace_na(., median(., na. rm = TRUE ))))
Metodo 3: sostituire i valori NA con la mediana in tutte le colonne numeriche
df %>% mutate(across(where(is. numeric ), ~replace_na(., median(., na. rm = TRUE ))))
I seguenti esempi mostrano come utilizzare ciascun metodo nella pratica con il seguente frame di dati:
#create data frame df <- data. frame (player=c('A', 'B', 'C', 'D', 'E'), points=c(17, 13, NA, 9, 25), rebounds=c(3, 4, NA, NA, 8), blocks=c(1, 1, 2, 4, NA)) #view data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C NA NA 2 4 D 9 NA 4 5 E 25 8 NA
Esempio 1: sostituisci i valori NA con la mediana in una colonna
Il codice seguente mostra come sostituire i valori NA nella colonna dei punti con il valore mediano della colonna dei punti :
library (dplyr) library (tidyr) #replace NA values in points column with median of points column df <- df %>% mutate(across(points, ~replace_na(., median(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 15 NA 2 4 D 9 NA 4 5 E 25 8 NA
Il valore mediano nella colonna dei punti era 15, quindi il valore NA nella colonna dei punti è stato sostituito con 15.
Tutte le altre colonne sono rimaste invariate.
Esempio 2: sostituisci i valori NA con la mediana in più colonne
Il codice seguente mostra come sostituire i valori NA nelle colonne punto e blocco con le rispettive mediane di colonna:
library (dplyr) library (tidyr) #replace NA values in points and blocks columns with their respective medians df <- df %>% mutate(across(c(points, blocks), ~replace_na(., median(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1.0 2 B 13 4 1.0 3 C 15 NA 2.0 4 D 9 NA 4.0 5 E 25 8 1.5
Si noti che i valori NA nelle colonne punto e blocco sono stati entrambi sostituiti con le rispettive mediane di colonna.
Esempio 3: sostituisci i valori NA con la mediana in tutte le colonne numeriche
Il codice seguente mostra come sostituire i valori NA in ciascuna colonna numerica con il rispettivo valore mediano:
library (dplyr) library (tidyr) #replace NA values in all numeric columns with their respective medians df <- df %>% mutate(across(where(is. numeric ), ~replace_na(., median(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1.0 2 B 13 4 1.0 3 C 15 4 2.0 4 D 9 4 4.0 5 E 25 8 1.5
Si noti che i valori NA in tutte le colonne numeriche sono stati sostituiti dalle rispettive mediane delle colonne.
L’unica colonna che non era numerica (giocatore) è rimasta invariata.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in dplyr:
Come filtrare le righe contenenti una determinata stringa utilizzando dplyr
Come eliminare righe utilizzando dplyr
Come utilizzare la funzione across() in dplyr