Применение переименования 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"