Как использовать синтаксис программирования dplyr для создания и оценки имен переменных

Я хотел бы динамически вводить имя переменной, используя синтаксис программирования dplyr, однако, как многие описали, это может сбивать с толку.

Я играл с различными комбинациями quo / enquo !! и т.д. безрезультатно. Вот простейшая форма моего кода

library(tidyverse)

df <- tibble(
  color1 = c("blue", "blue", "blue", "blue", "blue"),
  color2 = c("black", "black", "black", "black", "black"),
  value = 1:5
)

num <- 2

df %>%
  mutate(color3 = !!(paste0("color", num)))


#> # A tibble: 5 x 4
#>   color1 color2 value color3
#>   <chr>  <chr>  <int> <chr> 
#> 1 blue   black      1 color2
#> 2 blue   black      2 color2
#> 3 blue   black      3 color2
#> 4 blue   black      4 color2
#> 5 blue   black      5 color2

Создано 19 декабря 2018 г. пакетом REPEX (v0.2.1)

Вместо этого я хотел бы оценить цитируемый ввод.

#> # A tibble: 5 x 4
#>   color1 color2 value color3
#>   <chr>  <chr>  <int> <chr> 
#> 1 blue   black      1 black 
#> 2 blue   black      2 black 
#> 3 blue   black      3 black 
#> 4 blue   black      4 black 
#> 5 blue   black      5 black

person TDP    schedule 19.12.2018    source источник


Ответы (1)


Мы можем использовать sym из rlang, чтобы преобразовать строку в символ, а затем оценить (!!)

library(dplyr)
df %>%
   mutate(color3 = !!(rlang::sym(paste0("color", num))))
# A tibble: 5 x 4
#  color1 color2 value color3
#  <chr>  <chr>  <int> <chr> 
#1 blue   black      1 black 
#2 blue   black      2 black 
#3 blue   black      3 black 
#4 blue   black      4 black 
#5 blue   black      5 black 
person akrun    schedule 19.12.2018
comment
Превосходно! Спасибо! Я подумал, что мне не хватало чего-то простого. - person TDP; 20.12.2018