r语言 - 是否有一种方法来使用向量在合并函数?



我有一些变量,我想在r中合并在一起,我已经将它们提取到一个向量中,以便在合并函数中使用它们。在函数中输入它们中的每一个都有点繁琐。有什么办法吗?

library(dplyr)
set.seed(123)
df <- data.frame(
var1 = sample(c(NA, 1, 3), 10, replace = T),
var2 = sample(c(NA, 1, 3), 10, replace = T),
var3 = sample(c(NA, 1, 3), 10, replace = T),
var4 = sample(c(NA, 1, 3), 10, replace = T),
age = floor(rnorm(10, 15, 2)),
gender = factor(round(runif(10, 1, 2)),
labels = c("Male", "Female"))
)
# Desired variables
myvars <- df %>% select(contains("var")) %>% names()

df_new <- df %>%
mutate(finalvar = coalesce(myvars))

!!!求值,用rlang::syms解包:

df %>%
mutate(finalvar = coalesce(!!! rlang::syms(myvars)))

或直接贴附rlang:

library(rlang)
df %>%
mutate(finalvar = coalesce(!!! syms(myvars)))

两输出:

var1 var2 var3 var4 age gender finalvar
1     3    1   NA   NA  14 Female        3
2     3    1   NA    3  17 Female        3
3     3   NA    3    3  14   Male        3
4     1    1    1   NA  12 Female        1
5     3    3    3    3  13 Female        3
6     1   NA    1    1  16 Female        1
7     1    3   NA   NA  14   Male        1
8     1    3    1    3  12   Male        1
9     3   NA    3   NA  13   Male        3
10   NA   NA    1   NA  14   Male        1

使用invoke

library(dplyr)
library(purrr)
df %>% 
mutate(finalvar = invoke(coalesce, across(all_of(myvars))))
var1 var2 var3 var4 age gender finalvar
1     3    1   NA   NA  14 Female        3
2     3    1   NA    3  17 Female        3
3     3   NA    3    3  14   Male        3
4     1    1    1   NA  12 Female        1
5     3    3    3    3  13 Female        3
6     1   NA    1    1  16 Female        1
7     1    3   NA   NA  14   Male        1
8     1    3    1    3  12   Male        1
9     3   NA    3   NA  13   Male        3
10   NA   NA    1   NA  14   Male        1