2015-03-25 3 views
8

Можно ли установить все имена столбцов в верхнем или нижнем диапазоне в цепочке dplyr или magrittr?Dplyr или Magrittr - tolower?

В приведенном ниже примере загружаются данные, а затем, используя трубу magrittr, связывайте ее с моими мутациями dplyr. В 4-й строке я использую функцию tolower, но это для другой цели: создать новую переменную с строчными наблюдениями.

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

Очевидно, я искал что-то вроде colnames = tolower, но знаю, что это не работает/существует.

Я отмечаю функцию dplyr rename, но это не очень полезно.

В magrittr варианты ColName являются:

set_colnames вместо базового R-х colnames<-
set_names вместо names<-

Я пытался многочисленных перестановок базового АиР с этим, но не кости.

Очевидно, что это очень просто в базе r.

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

Однако, кажется нелогичным с / философий, которые вы должны сделать это как неуклюжий один лайнер, прежде чем перейти к элегантной цепи dplyr/magrittr кода.

ответ

15

Использование magrittr «S„соединение назначения трубы-оператор“%<>% может быть, если я правильно понимаю ваш вопрос, еще более краткий вариант.

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

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

Или что то же функция использование замена в форме без замены:

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 доступен в базовой R и может конвертировать в обоих направлениях, то есть можно преобразовать в любой верхний регистр или нижний регистр с помощью флага upper, так как потребность может быть.

Также colnames() будет использовать только заголовки столбцов для преобразования регистра.

+2

* casefold является оболочкой для TOLOWER и ToUpper для совместимости с S-PLUS * –

1

Вы также можете определить функцию:

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

library(dplyr) 

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

ИМХО это лучшее решение. Я назвал эту функцию 'names_to_upper' (и второй как' names_to_lower'), 'colnames_' тоже выглядел бы хорошо:' mtcars%>% colnames_to_upper%>% select (MPG) '. – Marek

8

dplyr теперь позволяет это:.

mydata %>% rename_all(tolower) 

 Смежные вопросы

  • Нет связанных вопросов^_^