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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *