2

我正在使用一个相当大的数据库,其中包含一个名为“ Species_name”的列,这是一个因子列,包含大约 40 个不同物种的名称。由于 R 通常区分大小写(特别是在绘制图形时),我想知道是否可以编写一行代码,将本列中的所有物种名称格式化为大写,然后小写,即棕色螃蟹、金发射线等。

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

非常感谢!

4

3 回答 3

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))
于 2014-04-25T09:49:06.573 回答
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"

我认为值得一提的是,有一个函数可以将字符串转换为标题大小写,但不是您正在寻找的方式。

stri_trans_totitle(x)
## [1] "Ala Ma Kota 123"
于 2014-04-25T09:50:56.570 回答
0
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

于 2014-04-25T10:06:34.477 回答