Nehmen wir an, ich habe eine Zeichenfolge mit zwei Wörtern und möchte beide groß schreiben.
name <- c("zip code", "state", "final count")
Das Hmisc
Paket hat eine Funktion, capitalize
die das erste Wort großschreibt, aber ich bin nicht sicher, wie das zweite Wort großgeschrieben werden soll. Die Hilfeseite für capitalize
schlägt nicht vor, dass diese Aufgabe ausgeführt werden kann.
library(Hmisc)
capitalize(name)
# [1] "Zip code" "State" "Final count"
Ich möchte bekommen:
c("Zip Code", "State", "Final Count")
Was ist mit Drei-Wort-Zeichenfolgen:
name2 <- c("I like pizza")
r
string
title-case
ATMathew
quelle
quelle
paste0()
anstelle von verwendenpaste(..., sep="")
. Einfach kürzer.paste0 ()
dascollapse = ...
Argument nicht akzeptiertpaste0(c("a", "b"), collapse = ",")
funktioniert gut für mich. Vielleicht ist dies eine neue Funktion?Es gibt auch eine integrierte Base-R-Lösung für den Titelfall:
oder
quelle
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")
führt zuHELLO
. Vielleicht möchten Sie diestolower
zuerst umwickeln , als so:tools::toTitleCase(tolower("HELLO"))
was zurückgibtHello
Entspricht einem regulären Ausdruck, der am Anfang
^
oder nach einem Leerzeichen beginnt und auf das[[:space:]]
ein alphabetisches Zeichen folgt[[:alpha:]]
. Ersetzen Sie global (das g in gsub) alle derartigen Vorkommen durch den übereinstimmenden Anfang oder Leerzeichen und die Großbuchstabenversion des übereinstimmenden alphabetischen Zeichens\\1\\U\\2
. Dies muss mit dem Abgleich regulärer Ausdrücke im Perl-Stil erfolgen.In etwas ausführlicher für den Ersatz Argument
gsub()
,\\1
sagt ‚den Teil verwenden vonx
der ersten Unter Ausdruck übereinstimmen‘, dh der Teil derx
Anpassungs(^|[[:spacde:]])
. Ebenso\\2
sagt, benutze den Teil derx
Übereinstimmung mit dem zweiten Unterausdruck([[:alpha:]])
. Die\\U
Syntax wird mithilfe vonperl=TRUE
und aktiviert , um das nächste Zeichen in Großbuchstaben zu schreiben. Also für "Postleitzahl"\\1
ist "Postleitzahl",\\2
ist "Code",\\U\\2
ist "Code" und\\1\\U\\2
ist "Postleitzahl".Die
?regexp
Seite ist hilfreich, um reguläre Ausdrücke zu verstehen?gsub
und Dinge zusammenzusetzen.quelle
\\u
und aufgegeben, bevor mir klar wurde, dass ich ihn hätte kapitalisieren sollen ... etwas ironisch. Hier ist, was ich mir ausgedacht habe, nicht gründlich gegen einen seltsamen Ballfall geprüftgsub(pattern = "\\b([a-z])", replacement = "\\U\\1", name, perl = TRUE)
tolower(name)
wenn es andere Kappen gibtVerwenden Sie diese Funktion aus dem
stringi
Paketquelle
stri_tans_totitle
in eine Funktion namensstr_to_title()
. Es ist nur das stringi :: stri_trans_totitle () unter der Decke, aber je nach Workflow kann das Laden einer anderen Bibliothek (die Sie im Wesentlichen bereits geladen haben) gespeichert werden.Alternative:
quelle
Versuchen:
quelle
Hmisc
außer Kraft setzen kannplyr
‚s -summarize
Funktion , wie hier erwähnt: stackoverflow.com/a/35324305/288875Hmisc
ist ziemlich viel älter alsplyr
...Von der Hilfeseite für
?toupper
:quelle
Das Paket
BBmisc
enthält jetzt die FunktioncapitalizeStrings
.quelle
Alternativer Weg mit Teilzeichenfolge und Regexpr:
quelle
Sie können auch das Snakecase-Paket verwenden:
https://github.com/Tazinho/snakecase
quelle
Dies gibt allen wichtigen Wörtern Großbuchstaben
quelle
> lettercase::str_title_case("HEY HELLO") [1] "HEY HELLO"