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"
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"