Форматирование видовые названия в столбец В Р
Я работаю с довольно большой базой данных, содержащей столбец под названием "Species_name
" это столбец факторов и включает в себя названия около 40 различных видов. Поскольку R часто чувствителен к регистру(особенно при построении графиков) мне было интересно, можно ли написать строку кода, которая форматирует все названия видов в этой колонке в заглавный, а затем в нижний регистр, то есть коричневый краб, светлый луч и т. д.
Много Спасибо!
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