我有一长串变量(几百个),它们存储为一个文件,我需要使用
coalesce
运行计算来计算列。使用长列表,如果var1
(例如x
)为空,我需要从var2
中获取值,即y
。变量名与 var1
保持一致,最终表可以去掉 var2
。
var_list
的示例如下。
var_list <- tibble(
var1 = c("x", "m"),
var2 = c("y", "n"),
new = c("x_new", "m_new")
)
示例数据为:
data <- tibble(
x = 1:10,
y = 2:11,
m = c(NA, 2, 4, 6, NA,
7, 1, 9, NA, NA),
n = c(NA, 4, 5, 6, 0,
7, 1, 9, 0, NA)
)
The desired output is a tibble with 10 x 2:
x y
1 NA
2 2
3 4
4 6
5 0
6 7
7 1
8 9
9 0
10 NA
我已经尝试过,但它没有按预期工作:
data %>%
mutate(with(var_list,
set_names(coalesce(.[var1], .[var2]), var1)))
对此有什么想法吗?谢谢
我们可以使用
map2_dfc
:
library(purrr)
map2_dfc(var_list$var1, var_list$var2, ~coalesce(data[[.x]], data[[.y]])) %>%
rlang::set_names(var_list$new) %>%
bind_cols(data, .) %>%
select(all_of(var_list$new))
x_new m_new
<int> <dbl>
1 1 NA
2 2 2
3 3 4
4 4 6
5 5 0
6 6 7
7 7 1
8 8 9
9 9 0
10 10 NA