Форматирование видовые названия в столбец В Р


Я работаю с довольно большой базой данных, содержащей столбец под названием "Species_name " это столбец факторов и включает в себя названия около 40 различных видов. Поскольку R часто чувствителен к регистру(особенно при построении графиков) мне было интересно, можно ли написать строку кода, которая форматирует все названия видов в этой колонке в заглавный, а затем в нижний регистр, то есть коричневый краб, светлый луч и т. д.

Прошу прощения за мое невежество - я новичок в R!

Много Спасибо!

3 2

3 ответа:

Сначала вам нужно определить функцию, которая преобразует значения 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