web-dev-qa-db-ja.com

2単語の文字列で両方の単語の最初の文字を大文字にします

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")
161
ATMathew

大文字化を実行するベース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"
159
Andrie

組み込みの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"
120
petermeissner

開始^またはスペース[[: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は物事をまとめるのに役立ちます。

91
Martin Morgan

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"
79
bartektartanus

代替案:

library(stringr)
a = c("capitalise this", "and this")
a
[1] "capitalise this" "and this"       
str_to_title(a)
[1] "Capitalise This" "And This"   
36
Brijesh

試してください:

require(Hmisc)
sapply(name, function(x) {
  paste(sapply(strsplit(x, ' '), capitalize), collapse=' ')
})
21
diliop

?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"
16
Chase

パッケージ 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!"
9
Dirk

部分文字列と正規表現を使用した代替方法:

substring(name, 1) <- toupper(substring(name, 1, 1))
pos <- regexpr(" ", name, Perl=TRUE) + 1
substring(name, pos) <- toupper(substring(name, pos, pos))
6
greg L

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"

https://github.com/Tazinho/snakecase

2
Taz

これは、すべての主要な単語に大文字を与えます

library(lettercase)
xString = str_title_case(xString)
1
Cole Davis