我正在处理一个包含名为' Species_name
'的列的大型数据库。这是一个因子列,包括大约40种不同物种的名称。由于R通常区分大小写( 特别是在绘制图形时 ),我想知道是否有可能编写一行代码,将此列中的所有物种名称格式化为Capital然后小写,即布朗蟹,金发光芒等。
为我的无知道歉 - 我是R的新手!
非常感谢!
答案 0 :(得分:1)
首先需要定义一个将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))
答案 1 :(得分:0)
使用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"
我认为值得一提的是,有一个函数可以将字符串转换为Title Case,但不是你正在寻找的方式。
stri_trans_totitle(x)
## [1] "Ala Ma Kota 123"
答案 2 :(得分:0)
levels(df$Species_name) <- gsub("^([a-z])", "\\U\\1", tolower(levels(df$Species_name)), perl = TRUE)
Explanaiton:
首先,使用tolower
将所有名称设为小写,然后使用gsub
将首字母大写。
^([a-z])
在第一个字母后面,而\\U\\1
表示在Perl
中将其大写,因此perl = TRUE