我正在使用一个相当大的数据库,其中包含一个名为“ Species_name
”的列,这是一个因子列,包含大约 40 个不同物种的名称。由于 R 通常区分大小写(特别是在绘制图形时),我想知道是否可以编写一行代码,将本列中的所有物种名称格式化为大写,然后小写,即棕色螃蟹、金发射线等。
为我的无知道歉 - 我是 R 新手!
非常感谢!
我正在使用一个相当大的数据库,其中包含一个名为“ Species_name
”的列,这是一个因子列,包含大约 40 个不同物种的名称。由于 R 通常区分大小写(特别是在绘制图形时),我想知道是否可以编写一行代码,将本列中的所有物种名称格式化为大写,然后小写,即棕色螃蟹、金发射线等。
为我的无知道歉 - 我是 R 新手!
非常感谢!
您首先需要定义一个将character
值转换为所需大小写的函数。R 已经内置,tolower
但toupper
没有任何东西可以按照您想要的方式将它们大写。
capitalize <- function(x){
first <- toupper(substr(x, start=1, stop=1)) ## capitalize first letter
rest <- tolower(substr(x, start=2, stop=nchar(x))) ## everything else lowercase
paste0(first, rest)
}
然后,您只需将该函数应用于因子变量的级别。这是因素的优势之一:
levels(data$Species_name) <- capitalize(levels(data$Species_name))
使用 stringi 包中的函数:
require(stringi)
x <- "alA Ma KOTA 123"
stri_join(stri_trans_toupper(stri_sub(x,1,1)),stri_trans_tolower(stri_sub(x,2)))
## [1] "Ala ma kota 123"
我认为值得一提的是,有一个函数可以将字符串转换为标题大小写,但不是您正在寻找的方式。
stri_trans_totitle(x)
## [1] "Ala Ma Kota 123"
levels(df$Species_name) <- gsub("^([a-z])", "\\U\\1", tolower(levels(df$Species_name)), perl = TRUE)
说明:
首先,使用 使所有名称小写tolower
,然后使用 将首字母大写gsub
。
^([a-z])
在第一个字母之后,而\\U\\1
表示将其大写Perl
,因此perl = TRUE