64

是否有其他版本可以使每个字符串的第一个字母大写,并且对于 flac perl 也使用 FALSE?

name<-"hallo"
gsub("(^[[:alpha:]])", "\\U\\1", name, perl=TRUE)
4

6 回答 6

95

您可以尝试以下方法:

name<-"hallo"
paste(toupper(substr(name, 1, 1)), substr(name, 2, nchar(name)), sep="")

或者另一种方法是具有如下功能:

firstup <- function(x) {
  substr(x, 1, 1) <- toupper(substr(x, 1, 1))
  x
}

例子:

firstup("abcd")
## [1] Abcd

firstup(c("hello", "world"))
## [1] "Hello" "World"
于 2013-08-29T11:32:16.720 回答
66

正如评论中所指出的,现在可以这样做: stringr::str_to_title("iwejofwe asdFf FFFF")

stringrstringi在处理复杂的国际化、unicode 等的幕后 使用,您可以执行以下操作:stri_trans_totitle("kaCk, DSJAIDO, Sasdd.", opts_brkiter = stri_opts_brkiter(type = "sentence"))

下面有一个 C 或 C++ 库stringi

于 2016-01-24T20:41:44.883 回答
19

stringr中,有str_to_sentence()which 做类似的事情。这个问题的答案并不完全,但它解决了我遇到的问题。

str_to_sentence(c("not today judas", "i love cats", "other Caps converteD to lower though"))
#> [1] "Not today judas"  "I love cats"  "Other caps converted to lower though"  
于 2020-06-04T15:09:58.473 回答
17

对于懒惰的打字机:

  paste0(toupper(substr(name, 1, 1)), substr(name, 2, nchar(name)))

也会这样做。

于 2015-09-24T10:25:05.670 回答
8

通常我们想要第一个字母大写,其余的字符串小写。在这种情况下,我们需要先将整个字符串转换为小写。

受@alko989 答案的启发,函数将是:

firstup <- function(x) {
  x <- tolower(x)
  substr(x, 1, 1) <- toupper(substr(x, 1, 1))
  x
}

例子:

firstup("ABCD")
## [1] Abcd

另一种选择是str_to_titlestringr包装中使用

dog <- "The quick brown dog"    
str_to_title(dog)
## [1] "The Quick Brown Dog"
于 2019-10-15T01:28:13.620 回答
2

我喜欢使用带有 oneliner 的 stringr 的“tidyverse”方式

library(stringr)
input <- c("this", "is", "a", "test")
str_replace(input, "^\\w{1}", toupper)

导致:

[1] "This" "Is"   "A"    "Test"
于 2021-12-16T20:11:45.147 回答