Dplyr还是Magrittr-tolower?

dddzy1tm  于 2023-04-18  发布在  其他
关注(0)|答案(5)|浏览(151)

是否可以在dplyr或magrittr链中将所有列名设置为upper或lower?
在下面的例子中,我加载了数据,然后使用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的哲学不一致,在进入优雅的dplyr/magrittr代码链之前,你必须把它作为一个笨重的一行程序来做。

v440hwme

v440hwme1#

使用magrittr的“复合赋值管道操作符”%<>%可能是一个更简洁的选择,如果我对你的问题理解正确的话。

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

?`%<>%` # for more
prdp8dxp

prdp8dxp2#

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

casefold在基数R中可用,并且可以在两个方向上转换,即可以根据需要通过使用标志upper转换为全部大写或全部小写。
此外,colnames()将只使用列标题进行大小写转换。

jogvjijk

jogvjijk3#

你也可以定义一个函数:

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

library(dplyr)

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

vs91vp4v4#

使用{dplyr},我们可以:

mydata %>% rename_with(tolower)

rename_all()可用于相同的效果,但已被取代。

zzwlnbp8

zzwlnbp85#

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

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

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

相关问题