Disons que j'ai une chaîne de deux mots et que je veux les mettre tous les deux en majuscule.
name <- c("zip code", "state", "final count")
Le Hmisc
package a une fonction capitalize
qui met en majuscule le premier mot, mais je ne sais pas comment mettre le deuxième mot en majuscule. La page d'aide de capitalize
ne suggère 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")
r
string
title-case
ATMathew
la source
la source
paste0()
place depaste(..., sep="")
. Simplement plus court.paste0 ()
n'accepte pas l'collapse = ...
argumentpaste0(c("a", "b"), collapse = ",")
fonctionne bien pour moi. C'est peut-être une fonctionnalité récente?Il existe également une solution de base-R intégrée pour la casse du titre:
ou
la source
c("all", "above", "after", "along", "also", "among", "any", "both", "can", "few", "it", "less", "log", "many", "may", "more", "over", "some", "their", "then", "this", "under", "until", "using", "von", "when", "where", "which", "will", "without", "yet", "you", "your")
)tools::toTitleCase("HELLO")
se traduit parHELLO
. Vous voudrez peut-être aborder ceci entolower
premier, comme ceci:tools::toTitleCase(tolower("HELLO"))
qui retourneHello
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:]]
. À l' échelle mondiale (les g en gsub) remplacer tous ces événements avec le début identifié ou de l' espace et la version majuscule du caractère alphabétique identifié,\\1\\U\\2
. Cela doit être fait avec une correspondance d'expressions régulières de style perl.Dans un peu plus de détails pour l'argument de remplacement à
gsub()
,\\1
dit «utiliser la partie de lax
correspondance de la première sous-expression», c'est-à-dire la partie de lax
correspondance(^|[[:spacde:]])
. De même,\\2
indique utiliser la partiex
correspondant à la deuxième sous-expression([[:alpha:]])
. La\\U
syntaxe est activée en utilisantperl=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 "Code postal".La
?regexp
page est utile pour comprendre les expressions régulières,?gsub
pour mettre les choses ensemble.la source
\\u
et j'ai abandonné avant de réaliser que j'aurais dû la capitaliser ... quelque peu ironique. Voici ce que j'ai trouvé, pas complètement vérifié par rapport à un cas de balle étrangegsub(pattern = "\\b([a-z])", replacement = "\\U\\1", name, perl = TRUE)
tolower(name)
s'il y a d'autres casquettesUtilisez cette fonction à partir du
stringi
packagela source
stri_tans_totitle
dans une fonction nomméestr_to_title()
. C'est juste le stringi :: stri_trans_totitle () sous les couvertures, mais cela peut vous éviter de charger une autre bibliothèque (que vous pouvez, en substance, déjà chargée), en fonction de votre flux de travail.Alternative:
la source
Essayer:
la source
Hmisc
peut remplacerplyr
lasummarize
fonction de comme mentionné ici: stackoverflow.com/a/35324305/288875Hmisc
est un peu plus vieux queplyr
...Depuis la page d'aide pour
?toupper
:la source
Le package
BBmisc
contient maintenant la fonctioncapitalizeStrings
.la source
Méthode alternative avec sous-chaîne et regexpr:
la source
Vous pouvez également utiliser le package snakecase:
https://github.com/Tazinho/snakecase
la source
Cela donne des lettres majuscules à tous les mots principaux
la source
> lettercase::str_title_case("HEY HELLO") [1] "HEY HELLO"