Capitalizzare la prima lettera di entrambe le parole in una stringa di due parole
-
28-10-2019 - |
Domanda
Diciamo che ho una stringa di due parole e voglio capitalizzare entrambe.
name <- c("zip code", "state", "final count")
Il Hmisc
Il pacchetto ha una funzione capitalize
che ha capitalizzato la prima parola, ma non sono sicuro di come ottenere la seconda parola capitalizzata. La pagina di aiuto per capitalize
Non suggerisce che possa eseguire quell'attività.
library(Hmisc)
capitalize(name)
# [1] "Zip code" "State" "Final count"
Voglio ottenere:
c("Zip Code", "State", "Final Count")
Che dire delle corde di tre parole:
name2 <- c("I like pizza")
Soluzione
La funzione base R per eseguire la capitalizzazione è toupper(x)
. Dal file di aiuto per ?toupper
C'è questa funzione che fa ciò di cui hai bisogno:
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"
Modificare Funziona per qualsiasi stringa, indipendentemente dal conteggio delle parole:
simpleCap("I like pizza a lot")
[1] "I Like Pizza A Lot"
Altri suggerimenti
C'è un edificio Soluzione base-R Anche per il caso del titolo:
tools::toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"
o
library(tools)
toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"
Abbinare un'espressione regolare che inizia dall'inizio ^
o dopo uno spazio [[:space:]]
ed è seguito da un carattere alfabetico [[:alpha:]]
. A livello globale (la G in GSUB) sostituisce tutte queste occorrenze con l'inizio o lo spazio abbinato e la versione maiuscola del carattere alfabetico abbinato, \\1\\U\\2
. Questo deve essere fatto con la corrispondenza regolare di espressione regolare in stile Perl.
gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", name, perl=TRUE)
# [1] "Zip Code" "State" "Final Count"
In un po 'più di dettaglio per l'argomento sostitutivo gsub()
, \\1
dice 'Usa la parte di x
abbinando la prima sottoespressione ', cioè la parte di x
abbinamento (^|[[:spacde:]])
. Allo stesso modo, \\2
dice che usa la parte di x
corrispondente alla seconda sottoespressione ([[:alpha:]])
. Il \\U
è abilitata la sintassi utilizzando perl=TRUE
, e mezzi per rendere il personaggio successivo superiore del personaggio. Quindi per "codice postale", \\1
è "zip", \\2
è "codice", \\U\\2
è "codice", e \\1\\U\\2
è "codice postale".
Il ?regexp
La pagina è utile per comprendere le espressioni regolari, ?gsub
per mettere insieme le cose.
Usa questa funzione da stringi
pacchetto
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"
Alternativa:
library(stringr)
a = c("capitalise this", "and this")
a
[1] "capitalise this" "and this"
str_to_title(a)
[1] "Capitalise This" "And This"
Provare:
require(Hmisc)
sapply(name, function(x) {
paste(sapply(strsplit(x, ' '), capitalize), collapse=' ')
})
Dalla pagina di aiuto per ?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"
Il pacchetto BBmisc
Ora contiene la funzione 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!"
Modo alternativo con substring e regexpr:
substring(name, 1) <- toupper(substring(name, 1, 1))
pos <- regexpr(" ", name, perl=TRUE) + 1
substring(name, pos) <- toupper(substring(name, pos, pos))
Puoi anche usare il pacchetto 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"
Questo dà lettere maiuscole a tutte le parole importanti
library(lettercase)
xString = str_title_case(xString)