Как заменить na на mean в dplyr


Для замены значений NA средним значением с помощью функций из пакетов dplyr и Tidyr в R можно использовать следующие методы:

Способ 1: заменить значения NA средним значением в столбце

 df %>% mutate(across(col1, ~replace_na(., mean(., na. rm = TRUE ))))

Способ 2. Замените значения NA средним значением в нескольких столбцах.

 df %>% mutate(across(c(col1, col2), ~replace_na(., mean(., na. rm = TRUE ))))

Способ 3. Замените значения NA средними значениями во всех числовых столбцах.

 df %>% mutate(across(where(is. numeric ), ~replace_na(., mean(., na. rm = TRUE ))))

Следующие примеры показывают, как использовать каждый метод на практике со следующим фреймом данных:

 #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

Пример 1. Замените значения NA средним значением в столбце.

Следующий код показывает, как заменить значения NA в столбце точек средним значением в столбце точек :

 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

Среднее значение в столбце «баллы» составило 16, поэтому значение «НО» в столбце «баллы » было заменено на 16.

Все остальные столбцы остались без изменений.

Пример 2. Замените значения NA средним значением в нескольких столбцах.

Следующий код показывает, как заменить значения NA в столбцах точек и блоков соответствующими средними значениями столбцов:

 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

Обратите внимание, что значения NA в столбцах точек и блоков были заменены соответствующими средними значениями столбцов.

Пример 3. Замените значения NA средними значениями во всех числовых столбцах.

Следующий код показывает, как заменить значения NA в каждом числовом столбце соответствующим средним значением:

 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

Обратите внимание, что значения NA во всех числовых столбцах были заменены соответствующими средними значениями столбцов.

Единственный столбец, который не был числовым (игрок), остался без изменений.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в dplyr:

Как фильтровать строки, содержащие определенную строку, с помощью dplyr
Как рассчитать относительные частоты с помощью dplyr
Как выбрать первую строку по группе с помощью dplyr

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *