両方の単語の最初の文字を2つの単語の文字列に大文字にする
-
28-10-2019 - |
質問
私は2つの単語の文字列を持っていて、それらの両方を大文字にしたいとしましょう。
name <- c("zip code", "state", "final count")
Hmisc
パッケージには機能があります capitalize
最初の単語を大文字にしましたが、2番目の単語を大文字にする方法がわかりません。のヘルプページ capitalize
そのタスクを実行できることを示唆していません。
library(Hmisc)
capitalize(name)
# [1] "Zip code" "State" "Final count"
私は手に入れたい:
c("Zip Code", "State", "Final Count")
3ワードの文字列はどうですか:
name2 <- c("I like pizza")
解決
大文字化を実行するベースR関数はです toupper(x)
. 。ヘルプファイルから ?toupper
必要なことを行うこの関数があります。
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"
編集 これは、単語数に関係なく、あらゆる文字列に対して機能します。
simpleCap("I like pizza a lot")
[1] "I Like Pizza A Lot"
他のヒント
ビルドインがあります ベースRソリューション タイトルケースについても:
tools::toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"
また
library(tools)
toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"
最初から始まる正規表現を一致させます ^
またはスペースの後 [[:space:]]
その後、アルファベット順の文字が続きます [[:alpha:]]
. 。グローバルに(GSUBのG)、そのようなすべての発生を一致した開始または空間と、一致したアルファベット文字の上限バージョンに置き換えます。 \\1\\U\\2
. 。これは、Perlスタイルの正規表現マッチングで行う必要があります。
gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", name, perl=TRUE)
# [1] "Zip Code" "State" "Final Count"
交換の議論のためにもう少し詳細に gsub()
, \\1
'の一部を使用してください x
最初のサブエクスペッション '、つまり、の部分に一致する x
マッチング (^|[[:spacde:]])
. 。同じく、 \\2
の部分を使用すると言います x
2番目のサブ発現に一致します ([[:alpha:]])
. 。 \\U
使用して構文が有効になっています perl=TRUE
, 、および次のキャラクターを上ケースにすることを意味します。したがって、「郵便番号」の場合、 \\1
「zip」です、 \\2
「コード」です、 \\U\\2
「コード」です \\1\\U\\2
「郵便番号」です。
?regexp
ページは正規表現を理解するのに役立ちます、 ?gsub
物事をまとめるために。
からこの関数を使用します 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"
別:
library(stringr)
a = c("capitalise this", "and this")
a
[1] "capitalise this" "and this"
str_to_title(a)
[1] "Capitalise This" "And This"
試す:
require(Hmisc)
sapply(name, function(x) {
paste(sapply(strsplit(x, ' '), capitalize), collapse=' ')
})
ヘルプページから ?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"
その包み BBmisc
次に、関数が含まれています 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!"
サブストリングとregexprを使用した代替方法:
substring(name, 1) <- toupper(substring(name, 1, 1))
pos <- regexpr(" ", name, perl=TRUE) + 1
substring(name, pos) <- toupper(substring(name, pos, pos))
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"
これにより、すべての主要な言葉に大文字が与えられます
library(lettercase)
xString = str_title_case(xString)