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

时间:2019-04-16 15:12:41

标签: r dplyr nse

我正在构建一个函数,该函数提供一个数据框和一个数字变量名称的向量-我希望它为每个数字向量返回一个具有相应变量的数据框架,该变量将其分成间隔。

我知道如何使用一个变量,但是使用多个变量名,我得到“错误::=的LHS不能与!!!拼接”。

以下是可重现的示例:

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 :=有关,但我似乎无法完全理解问题所在。

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以在没有mutate的情况下做到这一点,也可以躲避nse

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

答案 1 :(得分:1)

我们可以将:=transmute一起使用

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