我有一些变量,我想在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