Digamos que tengo una cadena de dos palabras y quiero capitalizar ambas.
name <- c("zip code", "state", "final count")
El Hmiscpaquete tiene una función capitalizeque capitaliza la primera palabra, pero no estoy seguro de cómo capitalizar la segunda palabra. La página de ayuda paracapitalize 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")
r
string
title-case
ATMathew
fuente
fuente

paste0()lugar depaste(..., sep=""). Simplemente más cortopaste0 ()que no acepta elcollapse = ...argumentopaste0(c("a", "b"), collapse = ",")funciona bien para mi Tal vez esta es una característica reciente?También hay una solución base-R incorporada para el caso del título:
o
fuente
c("all", "above", "after", "along", "also", "among", "any", "both", "can", "few", "it", "less", "log", "many", "may", "more", "over", "some", "their", "then", "this", "under", "until", "using", "von", "when", "where", "which", "will", "without", "yet", "you", "your"))tools::toTitleCase("HELLO")resultados enHELLO. Es posible que desee concluir estotolowerprimero, así: lotools::toTitleCase(tolower("HELLO"))que regresaHelloHaga coincidir una expresión regular que comienza al principio
^o después de un espacio[[:space:]]y es seguida por un carácter alfabético[[:alpha:]]. A nivel mundial (la g en gsub) reemplazar todos estos hechos con el inicio o en el espacio y la versión en mayúsculas del carácter alfabético emparejado emparejado,\\1\\U\\2. Esto tiene que hacerse con la coincidencia de expresiones regulares de estilo perl.En un poco más de detalle para el argumento de reemplazo
gsub(),\\1dice 'usa la parte de hacerxcoincidir la primera sub-expresión', es decir, la parte de hacerxcoincidir(^|[[:spacde:]]). Del mismo modo,\\2dice usar la parte dexemparejar la segunda subexpresión([[:alpha:]]). La\\Usintaxis se habilita usandoperl=TRUE, y significa hacer que el siguiente carácter sea mayúscula. Entonces, para "Código postal",\\1es "Código postal",\\2es "código",\\U\\2es "Código" y\\1\\U\\2es "Código postal".La
?regexppágina es útil para comprender expresiones regulares,?gsubpara armar cosas.fuente
\\uy me di por vencido antes de darme cuenta de que debería haberlo capitalizado ... algo irónico. Esto es lo que se me ocurrió, no examinado a fondo en casos extrañosgsub(pattern = "\\b([a-z])", replacement = "\\U\\1", name, perl = TRUE)tolower(name)si hay otras tapasUse esta función del
stringipaquetefuente
stri_tans_totitleen una función llamadastr_to_title(). Es solo el stringi :: stri_trans_totitle () debajo de las cubiertas, pero podría ahorrar cargar otra biblioteca (que, en esencia, ya puede haber cargado), dependiendo de su flujo de trabajo.Alternativa:
fuente
Tratar:
fuente
Hmiscpuede anularplyrlasummarizefunción como se menciona aquí: stackoverflow.com/a/35324305/288875Hmisces bastante mayor queplyr...Desde la página de ayuda para
?toupper:fuente
El paquete
BBmiscahora contiene la funcióncapitalizeStrings.fuente
Forma alternativa con subcadena y regexpr:
fuente
También puede usar el paquete snakecase:
https://github.com/Tazinho/snakecase
fuente
Esto le da letras mayúsculas a todas las palabras principales
fuente
> lettercase::str_title_case("HEY HELLO") [1] "HEY HELLO"