Digamos que tengo una cadena de dos palabras y quiero capitalizar ambas.
name <- c("zip code", "state", "final count")
El Hmisc
paquete tiene una función capitalize
que 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 estotolower
primero, así: lotools::toTitleCase(tolower("HELLO"))
que regresaHello
Haga 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()
,\\1
dice 'usa la parte de hacerx
coincidir la primera sub-expresión', es decir, la parte de hacerx
coincidir(^|[[:spacde:]])
. Del mismo modo,\\2
dice usar la parte dex
emparejar la segunda subexpresión([[:alpha:]])
. La\\U
sintaxis se habilita usandoperl=TRUE
, y significa hacer que el siguiente carácter sea mayúscula. Entonces, para "Código postal",\\1
es "Código postal",\\2
es "código",\\U\\2
es "Código" y\\1\\U\\2
es "Código postal".La
?regexp
página es útil para comprender expresiones regulares,?gsub
para armar cosas.fuente
\\u
y 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
stringi
paquetefuente
stri_tans_totitle
en 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
Hmisc
puede anularplyr
lasummarize
función como se menciona aquí: stackoverflow.com/a/35324305/288875Hmisc
es bastante mayor queplyr
...Desde la página de ayuda para
?toupper
:fuente
El paquete
BBmisc
ahora 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"