IT

두 단어 문자열에서 두 단어의 첫 번째 문자 대문자화

itgroup 2023. 6. 12. 21:19
반응형

두 단어 문자열에서 두 단어의 첫 번째 문자 대문자화

제가 두 단어 문자열을 가지고 있고 두 단어 모두를 대문자로 사용하고 싶다고 가정해 보겠습니다.

name <- c("zip code", "state", "final count")

Hmisc패키지에 기능이 있습니다.capitalize첫 번째 단어를 대문자로 썼지만 두 번째 단어를 대문자로 쓰는 방법을 잘 모르겠습니다.의 도움말 페이지capitalize이 작업을 수행할 수 있다고는 할 수 없습니다.

library(Hmisc)
capitalize(name)
# [1] "Zip code"    "State"       "Final count"

원하는 항목:

c("Zip Code", "State", "Final Count")

세 단어 문자열은 어떻습니까?

name2 <- c("I like pizza")

타이틀 케이스에도 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"

대문자화를 수행하기 위한 기본 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"

시작 부분에서 시작하는 정규식과 일치^또는 공백 뒤에[[:space:]]그리고 그 뒤에 알파벳 문자가 옵니다.[[:alpha:]]전역적으로 (gingsub) 이러한 모든 발생을 일치하는 시작 또는 공백과 일치하는 알파벳 문자의 대문자 버전으로 대체합니다.\\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두 번째 하위 표현과 일치([[:alpha:]]).그\\U를 사용하여 구문을 사용할 수 있습니다.perl=TRUE다음 문자를 대문자로 만드는 것을 의미합니다.그래서 "Zip code"의 경우,\\1"Zip"입니다.\\2"코드"입니다.\\U\\2는 "코드"이며,\\1\\U\\2는 "Zip Code"입니다.

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

이제 패키지에 함수가 포함됩니다.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_title_case(name)
#> [1] "Zip Code"    "State"       "Final Count"

# or 
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)

다음을 사용하는 다른 버전StrCapDescTools

Text = c("This is my phrase in r", "No, this is not my phrase in r")

DescTools::StrCap(Text) # Default only first character capitalized
[1] "This is my phrase in r"         "No, this is not my phrase in r"

DescTools::StrCap(Text, method = "word") # Capitalize each word
[1] "This Is My Phrase In R"        "No This Is Not My Phrase In R"

> DescTools::StrCap(Text, method = "title") # Capitalize as in titles
[1] "This Is My Phrase in R"         "No, This Is Not My Phrase in R"

◦ 한 줄
◦ 하나의 기존 함수, 새 패키지 없음
◦ 목록/모든 단어에서 작동하는
✓ 첫 번째 문자는 대문자로 표시하고 나머지 단어는 아래로 표시합니다.

name <- c("zip CODE", "statE", "final couNt")
gsub("([\\w])([\\w]+)", "\\U\\1\\L\\2", name, perl = TRUE)
[1] "Zip Code"    "State"       "Final Count"

많이 사용할 계획이라면 포장지 기능을 만들 수 있을 것 같습니다.

capFirst <- function(x) gsub("([\\w])([\\w]+)", "\\U\\1\\L\\2", x, perl = TRUE)
capFirst(name)

특수 문자가 있는 경우 대신 다음과 같은 접두사를 사용할 수 있습니다.

capFirst <- function(x) gsub("(\\p{L})(\\p{L}+)", "\\U\\1\\L\\2", x, perl = TRUE)
capFirst(name)

펄은 대문자나 소문자로 만드는 방법을 모른다는 것을 제외하고는...그래서 항상 있습니다.

stringi::stri_trans_totitle(c("zip CODE", "éTAts", "final couNt"))
#[1] "Zip Code"    "États"       "Final Count"

다음은 사용할 필요가 없는 허용된 답변에 대한 약간의 개선 사항입니다.sapply()또한 첫 번째 문자가 아닌 문자는 강제로 낮춥니다.

titleCase <- Vectorize(function(x) {
  
  # Split input vector value
  s <- strsplit(x, " ")[[1]]
  
  # Perform title casing and recombine
  ret <- paste(toupper(substring(s, 1,1)), tolower(substring(s, 2)),
        sep="", collapse=" ")
  
  return(ret)
  
}, USE.NAMES = FALSE)


name <- c("zip CODE", "statE", "final couNt")

titleCase(name)

#> "Zip Code"       "State" "Final Count" 

이것은 일부 사람들에게 유용할 수 있습니다.단어가 대문자로 표시되면 먼저 소문자로 만들어야 합니다.

tools::toTitleCase("FRANCE")
[1] "FRANCE"

와는 반대로

tools::toTitleCase(tolower("FRANCE"))
[1] "France"

언급URL : https://stackoverflow.com/questions/6364783/capitalize-the-first-letter-of-both-words-in-a-two-word-string

반응형