2015-03-25 14 views
8

È possibile impostare tutti i nomi di colonna in alto o in basso all'interno di una catena dplyr o magrittr?Dplyr o Magrittr - tolower?

Nell'esempio seguente carico i dati e quindi, utilizzando una conduttura magrittr, li incateno alle mie mutazioni dplyr. Nella quarta riga uso la funzione tolower, ma questo è per uno scopo diverso: creare una nuova variabile con osservazioni minuscole.

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

Sono ovviamente cercando qualcosa di simile colnames = tolower ma so questo non funziona/esistere.

Annoto la funzione dplyr rename ma questo non è molto utile.

In magrittr opzioni nomecolonna sono:

set_colnames al posto della base di colnames<-
set_names invece di numerose permutazioni names<-

che ho provato la base di R con questi, ma niente da fare R.

Ovviamente questo è molto semplice in base r.

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

Tuttavia sembra incongruo con le / filosofie che avresti dovuto farlo come un goffo uno di linea, prima di passare ad un elegante catena di codice dplyr/magrittr.

risposta

15

Utilizzando magrittr s' "composto assegnazione pipe-operatore" %<>% potrebbe essere, se ho capito bene la tua domanda, ancora più opzione succinta.

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

?`%<>%` # for more 
21
iris %>% setNames(tolower(names(.))) %>% head 

o equivalentemente utilizzare la funzione di sostituzione in forma non-sostituzione:

iris %>% `names<-`(tolower(names(.))) %>% head 
iris %>% `colnames<-`(tolower(names(.))) %>% head # if you really want to use `colnames<-` 
2
mtcars %>% 
set_colnames(value = casefold(colnames(.), upper = FALSE)) %>% 
head 

casefold è disponibile nella base di R e possono convertire in entrambe le direzioni, cioè può convertire o tutti maiuscolo o minuscolo utilizzando il flag upper, come potrebbe essere bisogno.

Anche colnames() utilizzerà solo le intestazioni di colonna per la conversione del caso.

+2

* casefold è un wrapper per tolower e toupper previsto per la compatibilità con S-PLUS * –

1

Si potrebbe anche definire una funzione:

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

library(dplyr) 

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

IMHO è soluzione migliore. Ho chiamato questa funzione 'names_to_upper' (e seconda come' names_to_lower'), 'colnames_' sarebbe anche bella:' mtcars%>% colnames_to_upper%>% select (MPG) '. – Marek

8

dplyr permette ora questa:.

mydata %>% rename_all(tolower)