r string title-case

Poner en mayúscula la primera letra de ambas palabras en una cadena de dos palabras



string title-case (11)

Alternativa:

library(stringr) a = c("capitalise this", "and this") a [1] "capitalise this" "and this" str_to_title(a) [1] "Capitalise This" "And This"

Digamos que tengo una cadena de dos palabras y quiero capitalizar ambas.

name <- c("zip code", "state", "final count")

El paquete Hmisc tiene una función en capitalize que Hmisc mayúscula la primera palabra, pero no estoy seguro de cómo sacar la segunda palabra en mayúscula. La página de ayuda para capitalize no sugiere que pueda realizar esa tarea.

library(Hmisc) capitalize(name) # [1] "Zip code" "State" "Final count"

Quiero tener:

c("Zip Code", "State", "Final Count")

¿Qué pasa con las cadenas de tres palabras?

name2 <- c("I like pizza")


Desde la página de ayuda para ?toupper :

.simpleCap <- function(x) { s <- strsplit(x, " ")[[1]] paste(toupper(substring(s, 1,1)), substring(s, 2), sep="", collapse=" ") } > sapply(name, .simpleCap) zip code state final count "Zip Code" "State" "Final Count"


El paquete BBmisc ahora contiene la función capitalizeStrings .

library("BBmisc") capitalizeStrings(c("the taIl", "wags The dOg", "That Looks fuNny!") , all.words = TRUE, lower.back = TRUE) [1] "The Tail" "Wags The Dog" "That Looks Funny!"


Esto le da mayúsculas a todas las palabras principales

library(lettercase) xString = str_title_case(xString)


Haga coincidir una expresión regular que comience al principio ^ o después de un espacio [[:space:]] y vaya seguida de un carácter alfabético [[:alpha:]] . Globalmente (el g en gsub) reemplaza todas las ocurrencias con el principio o espacio coincidente y la versión en mayúscula del carácter alfabético coincidente, //1//U//2 . Esto tiene que hacerse con la coincidencia de expresiones regulares estilo perl.

gsub("(^|[[:space:]])([[:alpha:]])", "//1//U//2", name, perl=TRUE) # [1] "Zip Code" "State" "Final Count"

En un poco más de detalle para el argumento de reemplazo a gsub() , //1 dice ''usa la parte de x coincide con la primera (^|[[:spacde:]]) '', es decir, la parte de x coincide (^|[[:spacde:]]) . Del mismo modo, //2 dice que usa la parte de x coincide con la segunda subexpresión ([[:alpha:]]) . La //U es la sintaxis habilitada al usar perl=TRUE , y significa hacer que el siguiente carácter esté en mayúscula. Entonces, para "Código postal", //1 es "Zip", //2 es "código", //U//2 es "Código", y //1//U//2 es "Código postal".

La página ?gsub es útil para entender expresiones regulares ?gsub para poner cosas juntas.


La función R base para realizar mayúsculas es toupper(x) . Desde el archivo de ayuda de ?toupper hay esta función que hace lo que necesita:

simpleCap <- function(x) { s <- strsplit(x, " ")[[1]] paste(toupper(substring(s, 1,1)), substring(s, 2), sep="", collapse=" ") } name <- c("zip code", "state", "final count") sapply(name, simpleCap) zip code state final count "Zip Code" "State" "Final Count"

Editar Esto funciona para cualquier cadena, independientemente del número de palabras:

simpleCap("I like pizza a lot") [1] "I Like Pizza A Lot"


Manera alternativa con subcadena y regexpr:

substring(name, 1) <- toupper(substring(name, 1, 1)) pos <- regexpr(" ", name, perl=TRUE) + 1 substring(name, pos) <- toupper(substring(name, pos, pos))


También hay una solución base-R incorporada para el caso del título:

tools::toTitleCase("demonstrating the title case") ## [1] "Demonstrating the Title Case"

o

library(tools) toTitleCase("demonstrating the title case") ## [1] "Demonstrating the Title Case"


También puedes usar el paquete snakecase:

install.packages("snakecase") library(snakecase) name <- c("zip code", "state", "final count") to_upper_camel_case(name, sep_out = " ") #> [1] "Zip Code" "State" "Final Count"

https://github.com/Tazinho/snakecase


Tratar:

require(Hmisc) sapply(name, function(x) { paste(sapply(strsplit(x, '' ''), capitalize), collapse='' '') })


Use esta función del paquete stringi

stri_trans_totitle(c("zip code", "state", "final count")) ## [1] "Zip Code" "State" "Final Count" stri_trans_totitle("i like pizza very much") ## [1] "I Like Pizza Very Much"