我正在尝试编写一个ifelse()
我想传递给dplyr::mutate(across())
. 该函数应将 中指定的列中的 NA 值替换across()
为名称相似的列中的值。
例如,在以下虚构数据中,我想用 替换缺失x_var1
和y_var1
缺失:x_var2
y_var2
x <- tribble(~x_var1, ~x_var2, ~y_var1, ~y_var2,
5, 2, 0, 0,
NA, 10, 8, 0,
3, NA, 0, 5,
NA, NA, 7, 9)
我尝试构建以下函数:
ifelse_spec <- function(var) {
new_var = paste("y_", str_remove(cur_column(), "x_"), sep = "")
# print(new_var) # just to check new_var is correct
ifelse(is.na(var), !!sym(new_var) , var) # how to call new_var?
}
x %>%
mutate(across(c(x_var1, x_var2),
~ ifelse_spec(.)))
但它似乎不起作用。
但是,如果我直接运行这个单变量案例ifelse
,我会得到预期的结果。
x %>%
mutate(across(c(x_var1),
~ifelse(is.na(.), !!sym("y_var1"), .)))
如何构建允许我调用数据变量的自定义 ifelse 语句?
编辑:我得到以下适用于多变量情况,但仍在使用ifelse
而不是不同的功能。
x %>%
mutate(across(c(x_var1, x_var2),
~ifelse(is.na(.), eval(sym(paste("y_", str_remove(cur_column(), "x_"), sep = ""))), . )))