Применение переименования dplyr ко всем столбцам при использовании оператора трубы

Я работаю с импортированным набором данных, который соответствует приведенной ниже выдержке:

set.seed(1)
dta <- data.frame("This is Column One" = runif(n = 10),
                     "Another amazing Column name" = runif(n = 10),
                     "!## This Columns is so special€€€" = runif(n = 10),
                    check.names = FALSE)

я делаю некоторую очистку этих данных с помощью dplyr и я хотел бы изменить имена столбцов на синтаксически правильные и удалить пунктуацию в качестве второго шага. Что я пробовал до сих пор:

dta_cln <- dta %>% 
    rename(make.names(names(dta)))

выдает ошибку:

> dta_clean <- dta %>% 
+     rename(make.names(names(dta)))
Error: All arguments to rename must be named.

желаемого результата

чего я хочу достигнуть можно сделать в база:

names(dta) <- gsub("[[:punct:]]","",make.names(names(dta)))

что бы вернуться:

> names(dta)
[1] "ThisisColumnOne"          "AnotheramazingColumnname" "XThisColumnsissospecial"

Я хочу достичь того же эффекта, но с помощью dyplr и %>%.

3 ответов


Dplyr

используя dplyr 0.6.0 и выше, теперь есть rename_all функция:

  dta %>% 
    rename_all(funs(gsub("[[:punct:]]", "", make.names(names(dta)))))

что работает, но для меня это немного грязно. Если вы хотите больше гибкости с dplyr, вы также можете позвонить on:

  • rename_at
  • rename_if

дворник

это довольно хороший пакет (с большим количеством дополнительных утилит), который может легко очистить имена столбцов:

library(janitor)

dta %>% 
  clean_names()

который переименует и очистит все имена столбцов до следующего:

[1] "this_is_column_one"  "another_amazing_column_name"  "x_this_columns_is_so_special"

все становится snake_case, а не CamelCase, но в целом clean_names очень гибко в именах столбцов, которые он обрабатывает. Если это сделка Breaker, вы можете использовать еще один пакет snakecase для его функции to_big_camel_case() внутри


mtcars %>% 
  data.table::setnames(
    old = mtcars %>% names(),
    new = mtcars %>% names() %>% paste0("_new_name")
  )

функции setnames на data.table пакет предназначен для переименования имен столбцов в фрейме данных. old и new в этой функции нам нужны два аргумента.

mtcars %>% names() выводит имена столбцов фрейма данных mtcars в трубопроводе %>% путь, так что вы можете также использовать names(mtcars). Они же самое.

в этом минимальном примере я переименовываю имена столбцов в pipeline %>% и добавить все старые имена столбцов с постфиксом, используя


вы также можете попробовать это

set.seed(1)
dta <- data.frame("This is Column One" = runif(n = 10),
                 "Another amazing Column name" = runif(n = 10),
                 "!## This Columns is so special€€€" = runif(n = 10),
                check.names = FALSE)

dta <- dta  %>% 
  setNames(gsub("[^[:alnum:] ]", perl = TRUE,
            "",
            names(.))) %>% 
  setNames(gsub("(\w)(\w*)",
            "\U\1\L\2",
            perl = TRUE,
            names(.)))

names(dta)
[1] "This Is Column One"          "Another Amazing Column Name" " This Columns Is So Special"