如何使用 R 中具有预定义列表的列对来运行具有多个参数的函数?

问题描述 投票:0回答:1

我有一长串变量(几百个),它们存储为一个文件,我需要使用

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)))

对此有什么想法吗?谢谢

r purrr
1个回答
0
投票

我们可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.