我正在构建一个函数,该函数提供一个数据框和一个数字变量名称的向量-我希望它为每个数字向量返回一个具有相应变量的数据框架,该变量将其分成间隔。
我知道如何使用一个变量,但是使用多个变量名,我得到“错误::=
的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 :=
有关,但我似乎无法完全理解问题所在。
谢谢!
答案 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,.)