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")
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"
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"
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.
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"
Essayer:
require(Hmisc)
sapply(name, function(x) {
paste(sapply(strsplit(x, ' '), capitalize), collapse=' ')
})
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"
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!"
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))
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"
Cela donne des lettres majuscules à tous les mots principaux
library(lettercase)
xString = str_title_case(xString)