replace_na 使用 tidyselect?
replace_na with tidyselect?
假设我有一个包含一堆列的数据框,我想在其中执行相同的 NA
替换:
dd <- data.frame(x = c(NA, LETTERS[1:4]), a = rep(NA_real_, 5), b = c(1:4, NA))
例如,在上面的数据框中,我想做一些如replace_na(dd, where(is.numeric), 0)
来替换列[=16]中的NA
值=] 和 b
.
我可以
num_cols <- purrr::map_lgl(dd, is.numeric)
r <- as.list(setNames(rep(0, sum(num_cols)), names(dd)[num_cols]))
replace_na(dd, r)
但我正在寻找一些东西 tidier/more idiomatic/nicer ...
如果我们需要用 where(is.numeric)
动态执行 replace
ment,可以将其包装在 across
中
library(dplyr)
library(tidyr)
dd %>%
mutate(across(where(is.numeric), replace_na, 0))
或者我们可以将 replace
指定为 key/value 对的 list
replace_na(dd, list(a = 0, b = 0))
可以通过 select
ing numeric
的列以编程方式创建,获取 names
,转换为 key/value 与 deframe
的对(或使用 summarise
和 0)然后使用 replace_na
library(tibble)
dd %>%
select(where(is.numeric)) %>%
summarise(across(everything(), ~ 0)) %>%
replace_na(dd, .)
假设我有一个包含一堆列的数据框,我想在其中执行相同的 NA
替换:
dd <- data.frame(x = c(NA, LETTERS[1:4]), a = rep(NA_real_, 5), b = c(1:4, NA))
例如,在上面的数据框中,我想做一些如replace_na(dd, where(is.numeric), 0)
来替换列[=16]中的NA
值=] 和 b
.
我可以
num_cols <- purrr::map_lgl(dd, is.numeric)
r <- as.list(setNames(rep(0, sum(num_cols)), names(dd)[num_cols]))
replace_na(dd, r)
但我正在寻找一些东西 tidier/more idiomatic/nicer ...
如果我们需要用 where(is.numeric)
动态执行 replace
ment,可以将其包装在 across
library(dplyr)
library(tidyr)
dd %>%
mutate(across(where(is.numeric), replace_na, 0))
或者我们可以将 replace
指定为 key/value 对的 list
replace_na(dd, list(a = 0, b = 0))
可以通过 select
ing numeric
的列以编程方式创建,获取 names
,转换为 key/value 与 deframe
的对(或使用 summarise
和 0)然后使用 replace_na
library(tibble)
dd %>%
select(where(is.numeric)) %>%
summarise(across(everything(), ~ 0)) %>%
replace_na(dd, .)