在dplyr链中替换NA的问题导致解决方案
dt %.% group_by(a) %.% mutate(b = ifelse(is.na(b), mean(b, na.rm = T), b))
Run Code Online (Sandbox Code Playgroud)
与dplyr.我想用dplyr链来估算所有colums.没有单个列可以分组,而是我希望所有数字列都通过诸如列均值之类的方式替换所有NAs.
使用tidyverse/dp用列方法替换所有NA的最优雅方法是什么?
我们可以使用mutate_all与ifelse
dt %>%
group_by(a) %>%
mutate_all(funs(ifelse(is.na(.), mean(., na.rm = TRUE), .)))
Run Code Online (Sandbox Code Playgroud)
如果我们希望有一个紧凑的选项,然后用na.aggregate从zoo其中通过default替换NA与价值观mean
dt %>%
group_by(a) %>%
mutate_all(zoo::na.aggregate)
Run Code Online (Sandbox Code Playgroud)
如果我们没有分组变量,那么删除group_by并使用mutate_if(只是要谨慎使用一些非数字列)
dt %>%
mutate_if(is.numeric, zoo::na.aggregate)
Run Code Online (Sandbox Code Playgroud)
如果所有列都是数字,甚至是
zoo::na.aggregate(dt)
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3870 次 |
| 最近记录: |