Mettre en majuscule la première lettre des deux mots dans une chaîne de deux mots

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

  •  28-10-2019
  •  | 
  •  

Question

Disons que j'ai une chaîne de deux mots et que je veux mettre une majuscule les deux.

name <- c("zip code", "state", "final count")

Le paquet Hmisc a une fonction capitalize qui met en majuscule le premier mot, mais je ne suis pas sûr comment mettre en majuscule le deuxième mot.La page d'aide de capitalize ne suggère pas qu'il puisse effectuer cette tâche.

library(Hmisc)
capitalize(name)
# [1] "Zip code"    "State"       "Final count"

Je veux obtenir:

c("Zip Code", "State", "Final Count")

Qu'en est-il des chaînes de trois mots:

name2 <- c("I like pizza")
Était-ce utile?

La solution

La fonction de base R pour effectuer la capitalisation est toupper(x).Depuis le fichier d'aide de ?toupper, il y a cette fonction qui fait ce dont vous avez besoin:

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" 

Modifier Cela fonctionne pour n'importe quelle chaîne, quel que soit le nombre de mots:

simpleCap("I like pizza a lot")
[1] "I Like Pizza A Lot"

Autres conseils

Il existe également une solution de base-R intégrée pour la casse du titre:

tools::toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"

ou

library(tools)
toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"

Correspond à une expression régulière qui commence au début ^ ou après un espace [[:space:]] et est suivie d'un caractère alphabétique [[:alpha:]]. Globalement (le g dans gsub) remplace toutes ces occurrences par le début ou l'espace correspondant et la version majuscule du caractère alphabétique correspondant, \\1\\U\\2. Cela doit être fait avec une correspondance d'expressions régulières de style Perl.

gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", name, perl=TRUE)
# [1] "Zip Code"    "State"       "Final Count"

Dans un peu plus de détails pour l'argument de remplacement de gsub(), \\1 dit 'utiliser la partie de x correspondant à la première sous-expression', c'est-à-dire la partie de x correspondant à (^|[[:spacde:]]). De même, \\2 indique utiliser la partie de x correspondant à la deuxième sous-expression ([[:alpha:]]). Le \\U est une syntaxe activée en utilisant perl=TRUE et signifie que le caractère suivant est en majuscule. Donc, pour "Code postal", \\1 est "Zip", \\2 est "code", \\U\\2 est "Code" et \\1\\U\\2 est "Zip Code".

La page ?regexp est utile pour comprendre les expressions régulières, ?gsub pour assembler les choses.

Utilisez cette fonction du package 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"

Alternative:

library(stringr)
a = c("capitalise this", "and this")
a
[1] "capitalise this" "and this"       
str_to_title(a)
[1] "Capitalise This" "And This"   

Essayez:

require(Hmisc)
sapply(name, function(x) {
  paste(sapply(strsplit(x, ' '), capitalize), collapse=' ')
})

Depuis la page d'aide pour ?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"

Le package BBmisc contient maintenant la fonction 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!"

Méthode alternative avec sous-chaîne et regex:

substring(name, 1) <- toupper(substring(name, 1, 1))
pos <- regexpr(" ", name, perl=TRUE) + 1
substring(name, pos) <- toupper(substring(name, pos, pos))

Vous pouvez également utiliser le package 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

Cela donne des lettres majuscules à tous les mots principaux

library(lettercase)
xString = str_title_case(xString)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top