Mam wektor ciągów małymi literami. Chciałbym zmienić je na tytułowe, co oznacza, że pierwsza litera każdego słowa będzie pisana wielką literą. Udało mi się to zrobić za pomocą podwójnej pętli, ale mam nadzieję, że jest to bardziej wydajny i elegancki sposób, może jeden liniowiec z gsub
i regex.Jak przekonwertować wektor ciągów do tytułu tytułowego
Oto niektóre przykładowe dane, wraz z działającą podwójną pętlą, a następnie inne rzeczy, które wypróbowałem, które nie działały.
To zadziałało, ale wydaje się niezmiernie skomplikowane. Uciekłem do tego dopiero po bezskutecznym eksperymentowaniu z prostszymi podejściami. Oto niektóre z rzeczy, próbowałem, wraz z wyjściem:
# Google search suggested \\U might work, but evidently not in R
gsub("(\\b[a-z]+)", "\\U\\1" ,strings)
[1] "Ufirst Uphrase" "Uanother Uphrase Uto Uconvert"
[3] "Uand Uhere'Us Uanother Uone" "Ulast-Uone"
# I tried this on a lark, but to no avail
gsub("(\\b[a-z]+)", toupper("\\1"), strings)
[1] "first phrase" "another phrase to convert"
[3] "and here's another one" "last-one"
regex rejestruje odpowiednie pozycje w każdej struny, jak pokazano przez wywołanie gregexpr
, ale ciąg wymiana wyraźnie nie działa zgodnie z oczekiwaniami.
Jeśli nie możesz już powiedzieć, jestem stosunkowo nowy w wyliczeniach i byłbym wdzięczny za pomoc w uzyskaniu prawidłowego działania zamiennika. Chciałbym również nauczyć się struktury regex, aby uniknąć przechwytywania listu po apostrofu, ponieważ nie chcę zmieniać przypadku tych liter.
Hi @BenBolker, twój re_from powinien być '" \\ b ([[: alpha:]]) ([[: alpha:]] +) "' zamiast '" \\ b ([[: lower:]]) ([[: lower:]] +) "'. W przeciwnym razie nie ma potrzeby używania '\\ E' w twojej ostatniej uwadze. –