如何使用 mutate 将向量列表分配给 r 中的新 var 名称列表

how to use mutate to assign a list of vectors to a list of new var names in r

我正在构建一个函数,您可以提供一个数据框和一个数字变量名称向量 - 我希望它 return 一个数据框,每个数字向量都有一个对应的变量,将其拆分为间隔。

我知道如何使用一个变量,但是使用多个变量名称我得到 "Error: The LHS of := can't be spliced with !!! "。

这是一个可重现的例子:

library(tidyverse)

vars <- c("wt", "qsec")
new_vars <- map_chr(vars, ~ paste0(.x, "_bin"))
bins <- map(vars, ~ quantile(mtcars[,.x], na.rm = T))
result <- mtcars %>% 
  mutate(!!!new_vars := map2(vars, bins, ~ cut(mtcars[,.x], breaks = .y))) 

我想要得到的是 mtcars 但有 2 个额外的列。 1. wt_bin - 这将是 "wt" 匹配的分位数间隔 2. qsec_bin - 这将是 "qsec" 匹配到

的分位数间隔

我知道它与 !!!new_vars := 有关,但我似乎无法准确理解问题所在。

谢谢!

你可以不用 mutate 也能躲开 nse:

map2_dfc(vars, bins, ~ cut(mtcars[, .x], .y, labels = F)) %>% 
  set_names(new_vars) %>% 
  bind_cols(mtcars, .)

我们可以使用 :=transmute

library(tidyverse)
map2_dfc(vars, bins, ~
                 mtcars %>%
                       transmute(!! paste0(.x, "_bin") := 
                           cut(!! rlang::sym(.x), breaks = .y))) %>% 
                 bind_cols(mtcars,.)