替换 dplyr 链的所有列中的 NA

2024-03-16

问题替换 dplyr 链中的 NA https://stackoverflow.com/questions/21714867/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_all with ifelse

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

如果我们想要一个紧凑的选项,那么使用na.aggregate from zoo哪个由default代替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)

data

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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

替换 dplyr 链的所有列中的 NA 的相关文章

随机推荐