В конвейере dplyr программно переименуйте столбец (как левый, так и правый) - PullRequest
0 голосов
/ 06 января 2019

Я хотел бы программно переименовать столбец (используя одну переданную переменную) в конвейере dplyr. Я создал минимальный пример ниже с комментариями. Последняя пара попыток работает. Но они чувствуют себя странно. Действительно ли это лучший способ достижения моего результата в тидиверсе? Если нет, то что? Кроме того, почему !! оценивает слева, а не str_c()?

Я все еще чувствую, что я не ворчу, как думать в тидиверсе - особенно когда это касается :=, !!!, !!, ~, vars(), funs(), enquo() и т. Д., Операторы и функции.

library(tidyverse) 

OLD_COL_NAME <- "disp"
NEW_COL_NAME <- "PREFIX_disp"

# Gives desired result, but would prefer not to pass `NEW_COL_NAME`
mtcars %>%
  rename(!!NEW_COL_NAME := !!OLD_COL_NAME)
# mpg cyl PREFIX_disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4           21.0   6       160.0 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag       21.0   6       160.0 110 3.90 2.875 17.02  0  1    4    4

# Thought this would give BOTH desired result and functionality. 
# Surprisingly to me, didn't work. 
mtcars %>%
  rename(str_c("PREFIX_", !!OLD_COL_NAME) := !!OLD_COL_NAME)
# Error: The LHS of `:=` must be a string or a symbol

# Also surprinsigly, this didn't work either
mtcars %>%
  rename(!!str_c("PREFIX_", !!OLD_COL_NAME) := !!OLD_COL_NAME)
# Error in !OLD_COL_NAME : invalid argument type

# Gives desired result. But clunky. Is this really the best-practices approach 
# in the tidyverse?
mtcars %>%
  rename_at(vars(!!OLD_COL_NAME), funs(str_c("PREFIX_", !!OLD_COL_NAME)))

# Gives desired result. Less clunky. Again, is this the best-practices approach?
mtcars %>%
  rename_at(vars(!!OLD_COL_NAME), ~ str_c("PREFIX_", .x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...