Capitalizzare la prima lettera di entrambe le parole in una stringa di due parole

StackOverflow https://stackoverflow.com/questions/6364783

  •  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")
È stato utile?

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"

https://github.com/tazinho/snakecase

Questo dà lettere maiuscole a tutte le parole importanti

library(lettercase)
xString = str_title_case(xString)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top