Applying dplyr's rename to all columns while using pipe operator

dplyr cheat sheet
dplyr mutate
dplyr apply function to each group
dplyr apply function to each column
dplyr summarise
dplyr package in r
r apply function by group
dplyr rowwise

I'm working with an imported data set that corresponds to the extract below:

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)

I'm doing some cleaning on this data using dplyr and I would like to change column names to syntatically correct ones and remove the punctuation as a second step. What I tried so far:

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

generates an error:

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

What I wan to achieve can be done in base:

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

which would return:

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

I want to achieve the same effect but using dyplr and %>%.


Apply a function (or a set of functions) to a set of - dplyr, This document introduces you to dplyr's basic set of tools, and shows you how to apply them to data frames. dplyr also supports databases via the dbplyr� When dplyr functions involve external functions that you’re applying to columns e.g. n_distinct() in the example above, this external function is placed in the .fnd argument. For example, we would to apply n_distinct() to species , island , and sex , we would write across(c(species, island, sex), n_distinct) in the summarise parentheses.


Set column names with the pipe like so:

iris %>% `colnames<-`(c("newcol1", "newcol2", "newcol3", "newcol4", "newcol5"))

Which returns

    newcol1 newcol2 newcol3 newcol4    newcol5
1       5.1     3.5     1.4     0.2     setosa
2       4.9     3.0     1.4     0.2     setosa
3       4.7     3.2     1.3     0.2     setosa

Introduction to dplyr, As of dplyr 0.2 (I think) rowwise() is implemented, so the answer to this problem becomes: iris %>% rowwise() %>% mutate(Max.Len= max(Sepal.Length,Petal. If the function returns more than one row, then instead of mutate (), do () must be used. Then to combine it back together, use rbind_all () from the dplyr package. In dplyr version dplyr_0.1.2, using 1:n () in the group_by () clause doesn't work for me. Hopefully Hadley will implement rowwise () soon.


You can also try this

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"

Applying a function to every row of a table using dplyr?, dplyr is a powerful R-package to transform and summarize tabular data with rows to perform another common task which is the “split-apply-combine” concept. Apply Function to Every Row of Data Using dplyr Package in R | rowwise Function Explained In this R tutorial you’ll learn how to apply a function to each row of a data frame or tibble with the dplyr package of the tidyverse. This task can be done with the rowwise function and, hence, this article contains one examples for this function.


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

The function setnames in data.table package is to rename the column names in data frame. old and new are two arguments in this function we need.

mtcars %>% names() outputs the column names of data frame mtcars in pipeline %>% way, so you can also use names(mtcars). They are same thing.

In this minimal example, I rename the column names in pipeline %>% and add all old column names with a postfix using paste0 function. You can add prefix, postfix or other rules.

dplyr tutorial, These fundamental functions of data transformation that the dplyr package offers Applying the select() function we can select only the variables of concern. Apply common dplyr functions to manipulate data in R. Employ the ‘pipe’ operator to link together a sequence of functions. Employ the ‘mutate’ function to apply other chosen functions to existing columns and create new columns of data.


Using Stringr and Dplyr, and the dot operator:

dta %>%
   dplyr::rename_all(funs(
                     stringr::str_replace_all( ., "[[:punct:]]", "_" )
   ))

Transforming Your Data with dplyr � UC Business Analytics R , Apply common dplyr functions to manipulate data in R. Employ the 'pipe' operator to link together a sequence of functions. Employ the 'mutate' function to apply other chosen functions to existing columns and create new columns of data. Under the hood, dplyr filter works by testing each row against your conditional expression and mapping the results to TRUE and FALSE. It then selects all rows that evaluate to TRUE. In our first example above, we checked that the diamond cut was Ideal with the conditional expression cut == 'Ideal'.


Aggregating and analyzing data with dplyr, What are dplyr and tidyr ? Selecting columns and filtering rows; Pipes. Challenge ; Mutate; Challenge; Split-apply-combine data analysis and the summarize()� Dplyr. Using dplyr 0.6.0 and above, there is now a rename_all function: dta %>% rename_all(funs(gsub("[[:punct:]]", "", make.names(names(dta))))) Which works, but it's a little messy to me. If you want more flexibility with dplyr, you can also call on: rename_at; rename_if; Janitor


Manipulating, analyzing and exporting data with tidyverse, I often find that I want to use a dplyr function on multiple columns at once. For instance, perhaps I want to scale all of the numeric variables at� A function or formula to apply to each group. It must return a data frame. If a function, it is used as is. It should have at least 2 formal arguments. If a formula, e.g. ~ head(.x), it is converted to a function. In the formula, you can use. or .x to refer to the subset of rows of .tbl for the given group


Across (dplyr 1.0.0): applying dplyr functions simultaneously across , It tells you that dplyr overwrites some functions in base R. If you want to use the use the dplyr verbs on a grouped data frame they'll be automatically applied� do() is superseded as of dplyr 1.0.0, because its syntax never really felt like it belong with the rest of dplyr. It's replaced by a combination of summarise() (which can now produce multiple rows and multiple columns), nest_by() (which creates a rowwise tibble of nested data), and across() (which allows you to access the data for the "current" group).