简体   繁体   中英

Dplyr or Magrittr - tolower?

Is it possible to set all column names to upper or lower within a dplyr or magrittr chain?

In the example below I load the data and then, using a magrittr pipe, chain it through to my dplyr mutations. In the 4th line I use the tolower function , but this is for a different purpose: to create a new variable with lowercase observations.

mydata <- read.csv('myfile.csv') %>%
    mutate(Year = mdy_hms(DATE),
           Reference = (REFNUM),
           Event = tolower(EVENT)

I'm obviously looking for something like colnames = tolower but know this doesn't work/exist.

I note the dplyr rename function but this isn't really helpful.

In magrittr the colname options are:

set_colnames instead of base R's colnames<-
set_names instead of base R's names<-

I've tried numerous permutations with these but no dice.

Obviously this is very simple in base r.

names(mydata) <- tolower(names(mydata))

However it seems incongruous with the / philosophies that you'd have to do that as a clunky one liner, before moving on to an elegant chain of dplyr/magrittr code.

dplyr现在允许这样:

mydata %>% rename_all(tolower)
iris %>% setNames(tolower(names(.))) %>% head

Or equivalently use replacement function in non-replacement form:

iris %>% `names<-`(tolower(names(.))) %>% head
iris %>% `colnames<-`(tolower(names(.))) %>% head  # if you really want to use `colnames<-`

Using magrittr 's "compound assignment pipe-operator" %<>% might be, if I understand your question correctly, an even more succinct option.

library("magrittr")
names(iris) %<>% tolower

?`%<>%` # for more
mtcars %>% 
set_colnames(value = casefold(colnames(.), upper = FALSE)) %>% 
head

casefold is available in base R and can convert in both direction, ie can convert to either all upper case or all lower case by using the flag upper , as need might be.

Also colnames() will use only column headers for case conversion.

You could also define a function:

upcase <- function(df) {
  names(df) <- toupper(names(df))
  df
}

library(dplyr)

mtcars %>% upcase %>% select(MPG)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM