web-dev-qa-db-fra.com

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

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

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

Le paquetage Hmisc a une fonction capitalize qui met en majuscule le premier mot, mais je ne sais pas comment obtenir le deuxième mot en majuscule. La page d'aide pour capitalize n'indique pas qu'il peut 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")
161
ATMathew

La fonction de base R pour effectuer la capitalisation est toupper(x). À partir du fichier d'aide pour ?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" 

Edit Ceci 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"
159
Andrie

Il y a un build solution de base-R pour le 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"
120
petermeissner

Faites correspondre une expression régulière qui commence au début ^ Ou après un espace [[:space:]] Et qui 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 et la version majuscule du caractère alphabétique correspondant, \\1\\U\\2. Cela doit être fait avec une correspondance d'expression régulière de style Perl.

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

Dans un peu plus de détail pour l'argument de remplacement de gsub(), \\1 Indique 'utilisez la partie de x correspondant à la première sous-expression', c'est-à-dire la partie de x correspondant à (^|[[:spacde:]]). De même, \\2 Dit utiliser la partie de x correspondant à la deuxième sous-expression ([[:alpha:]]). La syntaxe \\U Est activée à l'aide de 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 rationnelles, ?gsub Pour assembler des éléments.

91
Martin Morgan

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

Alternative:

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

Essayer:

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

De 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"
16
Chase

Le paquetage 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!"
9
Dirk

Manière alternative avec substring et regexpr:

substring(name, 1) <- toupper(substring(name, 1, 1))
pos <- regexpr(" ", name, Perl=TRUE) + 1
substring(name, pos) <- toupper(substring(name, pos, pos))
6
greg L

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

2
Taz

Cela donne des lettres majuscules à tous les mots principaux

library(lettercase)
xString = str_title_case(xString)
1
Cole Davis