Dplyr或Magrittr - tolower?

时间:2015-03-25 18:47:22

标签: r dplyr magrittr

是否可以在dplyr或magrittr链中将所有列名设置为更高或更低?

在下面的示例中,我加载数据,然后使用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代替基础R names<-

我尝试了很多这些但没有骰子的排列。

显然这在基础r中非常简单。

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

然而,在进入优雅的dplyr / magrittr代码链之前,与 / 哲学似乎不一致,你必须做一个笨重的单行班。

5 个答案:

答案 0 :(得分:27)

dplyr现在允许这样:

mydata %>% rename_all(tolower)

答案 1 :(得分:23)

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

或等效地以非替代形式使用替换功能:

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

答案 2 :(得分:18)

使用magrittr&#39;&#34;复合赋值管道运算符&#34;如果我理解你的问题,%<>%可能是一个更简洁的选择。

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

?`%<>%` # for more

答案 3 :(得分:2)

mtcars %>% 
set_colnames(value = casefold(colnames(.), upper = FALSE)) %>% 
head

casefold在基本R中可用,并且可以双向转换,即可以根据需要使用标志upper转换为全大写或全小写。

同样colnames()仅使用列标题进行大小写转换。

答案 4 :(得分:1)

您还可以定义一个函数:

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

library(dplyr)

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