Введите новые имена столбцов в качестве строки в функции 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
Есть ли способ сделать это?
Ответы
Ответ 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 как имя в списке.