両方の単語の最初の文字を2つの単語の文字列に大文字にする

StackOverflow https://stackoverflow.com/questions/6364783

  •  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"

https://github.com/tazinho/snakecase

これにより、すべての主要な言葉に大文字が与えられます

library(lettercase)
xString = str_title_case(xString)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top