`stringr` 仅将数据框中的第一个字母转换为大写

mai*_*-sh 5 string r uppercase stringr

我想将列中每个单词的第一个字母大写,而不将其余字母转换为小写。我正在尝试使用它,stringr因为它是矢量化的并且可以很好地与数据帧配合使用,但也会使用另一种解决方案。下面是一个表示,显示了我想要的输出和各种尝试。我只能选择第一个字母,但不知道如何将其大写。感谢您的帮助!

我还查看了相关帖子,但不确定如何在我的案例中应用这些解决方案(即在数据框中):

第一个字母改为大写

将双字字符串中两个单词的第一个字母大写

library(dplyr)
library(stringr)

words <-
  tribble(
    ~word, ~number,
    "problems", 99,
    "Answer", 42,
    "golden ratio", 1.61,
    "NOTHING", 0
  )

# Desired output
new_words <-
  tribble(
    ~word, ~number,
    "Problems", 99,
    "Answer", 42,
    "Golden Ratio", 1.61,
    "NOTHING", 0
  )

# Converts first letter of each word to upper and all other to lower
mutate(words, word = str_to_title(word))
#> # A tibble: 4 x 2
#>   word         number
#>   <chr>         <dbl>
#> 1 Problems      99   
#> 2 Answer        42   
#> 3 Golden Ratio   1.61
#> 4 Nothing        0

# Some attempts
mutate(words, word = str_replace_all(word, "(?<=^|\\s)([a-zA-Z])", "X"))
#> # A tibble: 4 x 2
#>   word         number
#>   <chr>         <dbl>
#> 1 Xroblems      99   
#> 2 Xnswer        42   
#> 3 Xolden Xatio   1.61
#> 4 XOTHING        0
mutate(words, word = str_replace_all(word, "(?<=^|\\s)([a-zA-Z])", "\\1"))
#> # A tibble: 4 x 2
#>   word         number
#>   <chr>         <dbl>
#> 1 problems      99   
#> 2 Answer        42   
#> 3 golden ratio   1.61
#> 4 NOTHING        0
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v2.0.0)于 2021-07-26 创建

Tim*_*sen 4

这是一个基本的 R 解决方案,使用gsub

words$word <- gsub("\\b([a-z])", "\\U\\1", words$word, perl=TRUE)
Run Code Online (Sandbox Code Playgroud)

这会将每个单词的第一个小写字母替换为其大写版本。请注意,\b单词边界将与前面带有空格或列值开头的小写字母匹配。