29

是否可以在 dplyr 或 magrittr 链中将所有列名设置为大写或小写?

在下面的示例中,我加载数据,然后使用 magrittr 管道将其链接到我的 dplyr 突变。在第 4 行中,我使用了tolowerfunction ,但这是出于不同的目的:创建一个带有小写观察值的新变量。

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

我显然正在寻找类似的东西,colnames = tolower但知道这不起作用/不存在。

我注意到 dplyrrename功能,但这并没有真正的帮助。

在 magrittr 中,colname 选项是:

set_colnames代替基数 Rcolnames<-
set_names代替基数 Rnames<-

我已经用这些尝试了很多排列,但没有骰子。

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

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

然而,在继续使用优雅的 dplyr/magrittr 代码链之前,您必须将其作为一个笨重的班轮来执行,这似乎与 /

4

5 回答 5

62

dplyr现在允许这样做:

mydata %>% rename_all(tolower)
于 2017-07-03T10:09:59.073 回答
25
iris %>% setNames(tolower(names(.))) %>% head

或者等效地使用非替换形式的替换函数:

iris %>% `names<-`(tolower(names(.))) %>% head
iris %>% `colnames<-`(tolower(names(.))) %>% head  # if you really want to use `colnames<-`
于 2015-03-25T18:48:52.620 回答
22

如果我正确理解您的问题,使用magrittr“复合分配管道运算符”%<>%可能是一个更简洁的选择。

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

?`%<>%` # for more
于 2015-03-25T20:02:03.383 回答
2
mtcars %>% 
set_colnames(value = casefold(colnames(.), upper = FALSE)) %>% 
head

casefold在 base R 中可用,并且可以双向转换,即可以根据需要使用 flag 转换为全部大写或全部小写upper

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

于 2015-03-25T22:33:40.570 回答
2

您还可以定义一个函数:

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

library(dplyr)

mtcars %>% upcase %>% select(MPG)
于 2016-11-15T16:22:56.930 回答