Powiedzmy, że mam ciąg składający się z dwóch słów i chcę w obu z nich pisać wielką literą.
name <- c("zip code", "state", "final count")
Hmisc
Pakiet posiada funkcję capitalize
, która kapitalizowane pierwsze słowo, ale nie jestem pewien jak zdobyć drugie słowo wielką literą. Strona pomocy dla capitalize
nie sugeruje, że może wykonać to zadanie.
library(Hmisc)
capitalize(name)
# [1] "Zip code" "State" "Final count"
Chcę dostać:
c("Zip Code", "State", "Final Count")
A co z ciągami składającymi się z trzech słów:
name2 <- c("I like pizza")
r
string
title-case
ATMathew
źródło
źródło
paste0()
zamiastpaste(..., sep="")
. Po prostu krótszy.paste0 ()
nie akceptujecollapse = ...
argumentupaste0(c("a", "b"), collapse = ",")
dla mnie działa dobrze. Może to nowa funkcja?Istnieje również wbudowane rozwiązanie base-R dla przypadku tytułu:
lub
źródło
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")
powodujeHELLO
. Możesz chcieć totolower
najpierw owinąć , tak jak to:tools::toTitleCase(tolower("HELLO"))
co zwracaHello
Dopasuj wyrażenie regularne rozpoczynające się na początku
^
lub po spacji[[:space:]]
i zakończone znakiem alfabetu[[:alpha:]]
. Globalnie (G w gsub) zastąpić wszystkie wystąpienia z dopasowaną rozpoczynających lub przestrzeń i wersji wyższej przypadek dopasowane charakterem alfabetycznej\\1\\U\\2
. Należy to zrobić za pomocą dopasowywania wyrażeń regularnych w stylu perla.W nieco bardziej szczegółowo za argument do zastąpienia
gsub()
,\\1
mówi „użyj częśćx
dopasowanie akapicie pierwszym wyrażenie”, czyli częśćx
dopasowywania(^|[[:spacde:]])
. Podobnie,\\2
mówi, używa częścix
dopasowania drugiego wyrażenia podrzędnego([[:alpha:]])
.\\U
Jest włączona przy użyciu składniperl=TRUE
, a środki do ich następnego znaku wielkich liter. Tak więc „Kod pocztowy”\\1
to „Kod pocztowy”,\\2
„Kod”,\\U\\2
„Kod” i\\1\\U\\2
„Kod pocztowy”.?regexp
Strona jest bardzo pomocna w zrozumieniu wyrażeń regularnych,?gsub
na oddanie rzeczy razem.źródło
\\u
użyłem i zrezygnowałem, zanim zdałem sobie sprawę, że powinienem to wykorzystać ... nieco ironiczne. Oto, co wymyśliłem, nie do końca sprawdzone pod kątem dziwnych przypadków piłkigsub(pattern = "\\b([a-z])", replacement = "\\U\\1", name, perl = TRUE)
tolower(name)
jeśli są inne czapkiUżyj tej funkcji z
stringi
pakietuźródło
stri_tans_totitle
funkcję o nazwiestr_to_title()
. To tylko stringi :: stri_trans_totitle () pod okładkami, ale może zaoszczędzić ładowanie innej biblioteki (którą w zasadzie możesz już załadować), w zależności od przepływu pracy.Alternatywny:
źródło
Próbować:
źródło
Hmisc
może zastąpićplyr
„ssummarize
funkcja jak wspomniano tutaj: stackoverflow.com/a/35324305/288875Hmisc
jest trochę starszy niżplyr
...Ze strony pomocy dla
?toupper
:źródło
Pakiet
BBmisc
zawiera teraz funkcjęcapitalizeStrings
.źródło
Alternatywny sposób z podciągiem i wyrażeniem regularnym:
źródło
Możesz również skorzystać z pakietu wężowego:
https://github.com/Tazinho/snakecase
źródło
To daje wielkie litery do wszystkich głównych słów
źródło
> lettercase::str_title_case("HEY HELLO") [1] "HEY HELLO"