Come sostituire na con mean in dplyr
È possibile utilizzare i seguenti metodi per sostituire i valori NA con la media utilizzando le funzioni dei pacchetti dplyr e Tidyr in R:
Metodo 1: sostituisci i valori NA con la media in una colonna
df %>% mutate(across(col1, ~replace_na(., mean(., na. rm = TRUE ))))
Metodo 2: sostituisci i valori NA con la media in più colonne
df %>% mutate(across(c(col1, col2), ~replace_na(., mean(., na. rm = TRUE ))))
Metodo 3: sostituisci i valori NA con la media in tutte le colonne numeriche
df %>% mutate(across(where(is. numeric ), ~replace_na(., mean(., 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 media in una colonna
Il codice seguente mostra come sostituire i valori NA nella colonna punti con il valore medio nella colonna punti :
library (dplyr) library (tidyr) #replace NA values in points column with mean of points column df <- df %>% mutate(across(points, ~replace_na(., mean(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 16 NA 2 4 D 9 NA 4 5 E 25 8 NA
Il valore medio nella colonna dei punti era 16, quindi il valore NA nella colonna dei punti è stato sostituito con 16.
Tutte le altre colonne sono rimaste invariate.
Esempio 2: sostituisci i valori NA con la media in più colonne
Il codice seguente mostra come sostituire i valori NA nelle colonne punto e blocco con le rispettive medie di colonna:
library (dplyr) library (tidyr) #replace NA values in points and blocks columns with their respective means df <- df %>% mutate(across(c(points, blocks), ~replace_na(., mean(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 16 NA 2 4 D 9 NA 4 5 E 25 8 2
Si noti che i valori NA nelle colonne punto e blocco sono stati entrambi sostituiti dalle rispettive medie di colonna.
Esempio 3: sostituisci i valori NA con la media in tutte le colonne numeriche
Il codice seguente mostra come sostituire i valori NA in ciascuna colonna numerica con il rispettivo valore medio:
library (dplyr) library (tidyr) #replace NA values in all numeric columns with their respective means df <- df %>% mutate(across(where(is. numeric ), ~replace_na(., mean(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 16 5 2 4 D 9 5 4 5 E 25 8 2
Si noti che i valori NA in tutte le colonne numeriche sono stati sostituiti dalle rispettive medie di colonna.
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 calcolare le frequenze relative usando dplyr
Come selezionare la prima riga per gruppo utilizzando dplyr