Є кілька відповідей, що згадують про функції dplyr::rename_with
та rlang::set_names
вже. Вони окремі. ця відповідь ілюструє різницю між ними та використання функцій та формул для перейменування стовпців.
rename_with
з dplyr
пакета може використовувати функцію або формулу для перейменування виділених стовпців, заданих як .cols
аргумент. Наприклад, передача імені функції toupper
:
library(dplyr)
rename_with(head(iris), toupper, starts_with("Petal"))
Еквівалентно передачі формули ~ toupper(.x)
:
rename_with(head(iris), ~ toupper(.x), starts_with("Petal"))
Під час перейменування всіх стовпців ви також можете використовувати set_names
пакет rlang. Щоб зробити інший приклад, давайте використаємо paste0
як функцію перейменування. pasteO
приймає 2 аргументи, в результаті існують різні способи передачі другого аргументу, залежно від того, використовуємо ми функцію чи формулу.
rlang::set_names(head(iris), paste0, "_hi")
rlang::set_names(head(iris), ~ paste0(.x, "_hi"))
Те саме можна досягти rename_with
, передавши фрейм даних як перший аргумент .data
, функцію як другий аргумент .fn
, усі стовпці як третій аргумент .cols=everything()
і параметри функції як четвертий аргумент ...
. В якості альтернативи ви можете розмістити другий, третій та четвертий аргументи у формулі, наведеній як другий аргумент.
rename_with(head(iris), paste0, everything(), "_hi")
rename_with(head(iris), ~ paste0(.x, "_hi"))
rename_with
працює лише з фреймами даних. set_names
є більш загальним і може також виконувати перейменування векторів
rlang::set_names(1:4, c("a", "b", "c", "d"))
old = c("a", "d", "e")