在R中的列中格式化物种名称

时间:2014-04-25 09:38:21

标签: string r title-case

我正在处理一个包含名为' Species_name'的列的大型数据库。这是一个因子列,包括大约40种不同物种的名称。由于R通常区分大小写( 特别是在绘制图形时 ),我想知道是否有可能编写一行代码,将此列中的所有物种名称格式化为Capital然后小写,即布朗蟹,金发光芒等。

为我的无知道歉 - 我是R的新手!

非常感谢!

3 个答案:

答案 0 :(得分:1)

首先需要定义一个将character值转换为所需大小写的函数。 R内置了tolowertoupper,但没有任何内容可以按照您的方式对其进行大写。

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