替换 dplyr 链所有列中的 NA

标签 r dplyr tidyverse

问题replace NA in a dplyr chain结果转化为解决方案

dt %.% group_by(a) %.% mutate(b = ifelse(is.na(b), mean(b, na.rm = T), b))

与 dplyr。我想用 dplyr 链来估算所有列。没有单独的列进行分组,而是我希望所有数字列的所有 NA 都替换为列平均值等平均值。

用 tidyverse/dp 替换所有具有列均值的 NA 最优雅的方法是什么?

最佳答案

我们可以使用mutate_allifelse

dt %>%
   group_by(a) %>% 
   mutate_all(funs(ifelse(is.na(.), mean(., na.rm = TRUE), .)))
<小时/>

如果我们想要一个紧凑的选项,那么使用na.aggregate来自zoodefault替换NA值为 mean

dt %>% 
   group_by(a) %>% 
   mutate_all(zoo::na.aggregate)
<小时/>

如果我们没有分组变量,则删除 group_by并使用mutate_if (只是要小心一些非数字列)

dt %>%
   mutate_if(is.numeric, zoo::na.aggregate)

如果所有列都是数字,甚至

zoo::na.aggregate(dt)

数据

set.seed(42)
dt <- data.frame(a = rep(letters[1:3], each = 3),
                 b= sample(c(NA, 1:5), 9, replace = TRUE), 
                 c = sample(c(NA, 1:3), 9, replace = TRUE))

关于替换 dplyr 链所有列中的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48059089/

相关文章:

r - 合并具有相等和不相等数据的行

r - 转换序列日期

r - 使用 map_at 在变量列表上使用 fct_relevel

使用 R 中的 Rvest 从表中删除多个标题行

r - 从开始到结束找到最接近的非重叠范围

r - 如何修复 R 函数中的 'Quosures can only be unquoted within a quasiquotation context' 错误

r - 条件变异和向量

R:矩阵计数比赛,当 2 支球队按计划进行互动时,每场比赛有 3 名参与者

r - 如何选择组合之和服从特定分布的样本组合?

r - dplyr mutate 和 summary 在数据表中的等价物是什么?