如何在 dplyr 中用 mean 替换 na


您可以使用 R 中dplyrTidyr包中的函数,使用以下方法将 NA 值替换为平均值:

方法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,因此列中的 NA 值替换为 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 按组选择第一行

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注