2つのWord文字列があり、両方を大文字にしたいとします。
name <- c("Zip code", "state", "final count")
Hmisc
パッケージには、最初のWordを大文字にする関数capitalize
がありますが、2番目のWordを大文字にする方法はわかりません。 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"
組み込みのbase-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
は、2番目のサブ式([[:alpha:]])
に一致するx
の部分を使用することを示します。 \\U
は、Perl=TRUE
を使用して構文を有効にし、次の文字を大文字にすることを意味します。したがって、「Zipコード」の場合、\\1
は「Zip」、\\2
は「コード」、_\\U\\2
は「コード」、_\\1\\U\\2
は「Zipコード」です。
?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!"
部分文字列と正規表現を使用した代替方法:
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)