替换 dplyr 链的所有列中的 NA
Replace NA in all columns of a dplyr chain
问题 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 替换为列均值等方式。
将所有 NA 替换为列均值 tidyverse/dp 的最优雅方法是什么?
我们可以使用 mutate_all
和 ifelse
dt %>%
group_by(a) %>%
mutate_all(funs(ifelse(is.na(.), mean(., na.rm = TRUE), .)))
如果我们想要一个紧凑的选项,那么使用 zoo
中的 na.aggregate
,其中 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)
数据
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))
问题 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 替换为列均值等方式。
将所有 NA 替换为列均值 tidyverse/dp 的最优雅方法是什么?
我们可以使用 mutate_all
和 ifelse
dt %>%
group_by(a) %>%
mutate_all(funs(ifelse(is.na(.), mean(., na.rm = TRUE), .)))
如果我们想要一个紧凑的选项,那么使用 zoo
中的 na.aggregate
,其中 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)
数据
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))