как использовать mutate, чтобы назначить список векторов списку новых имен переменных в r - PullRequest
0 голосов
/ 16 апреля 2019

Я создаю функцию, в которой вы предоставляете фрейм данных и вектор числовых имен переменных, и я хочу, чтобы он возвращал фрейм данных с соответствующей переменной для каждого числового вектора, который разбивает его на интервалы.

Я знаю, как это сделать с одной переменной, но с несколькими именами переменных я получаю «Ошибка: 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, но с двумя дополнительными столбцами.1. wt_bin - это будет квантильный интервал, для которого «wt» соответствует 2. qsec_bin - который будет квантильным интервалом, «qsec» соответствует

Я знаю, что это как-то связано с !!!new_vars :=, но я могуКажется, не совсем понял проблему.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 16 апреля 2019

Вы можете сделать это без mutate и увернуться от nse тоже:

map2_dfc(vars, bins, ~ cut(mtcars[, .x], .y, labels = F)) %>% 
  set_names(new_vars) %>% 
  bind_cols(mtcars, .)
1 голос
/ 16 апреля 2019

Мы можем использовать := с transmute

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