Подтвердить что ты не робот

Введите новые имена столбцов в качестве строки в функции dplyr rename

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

Например, у меня была эта функция

myFunc <- function(df, col){
  new <- paste0(col, '_1')
  out <- dplyr::rename(df, new = old)
  return(out)
}

Если я запустил этот

df <- data.frame(a = 1:3, old = 4:6)
myFunc(df, 'x')

Я получаю

  a new
1 1   4
2 2   5
3 3   6

В то время как я хочу, чтобы "новый" столбец был именем строки, которую я построил ( "x_1" ), т.е.

  a x_1
1 1   4
2 2   5
3 3   6

Есть ли способ сделать это?

4b9b3361

Ответ 1

Я думаю, это то, что вы искали. Это использование rename_, как предположил Хенрик, но аргумент имеет, скажем, интересное название:

> myFunc <- function(df, col){
+   new <- paste0(col, '_1')
+   out <- dplyr::rename_(df, .dots=setNames(list(col), new))
+   return(out)
+ }
> myFunc(data.frame(x=c(1,2,3)), "x")
  x_1
1   1
2   2
3   3
>

Обратите внимание на использование setNames, чтобы использовать значение new как имя в списке.