除了第一个字母,我想capitalise
句子的每个词。这里也有类似的讨论-Capitalize the first letter of both words in a two word string
因此该功能可以用作-
name <- c("zip code", "state", "final count")
simpleCap <- function(x) {
s <- strsplit(x, " ")[[1]]
paste(toupper(substring(s, 1,1)), substring(s, 2),
sep="", collapse=" ")
}
sapply(name, simpleCap)
但是它也将首字母大写。我想要类似"zip Code"
的东西,而不是"Zip Code"
。有什么办法可以做到这一点?
我们将不胜感激任何帮助。
答案 0 :(得分:3)
我喜欢使用toTitleCase
的链接中的第二个解决方案。您可以使用正则表达式将第一个字符转换为小写。
simpleCap <- function(x) {
sub('(.)', '\\L\\1', tools::toTitleCase(x), perl = TRUE)
}
simpleCap('Zip Code')
#[1] "zip Code"
simpleCap('this text')
#[1] "this Text"
simpleCap(name)
#[1] "zip Code" "state" "final Count"
答案 1 :(得分:2)
或者对strsplit
方法稍加修改:
capExceptFirst <- function(x) {
s <- strsplit(x, " ")[[1]]
paste(
tolower(s[1]),
paste(toupper(substring(s[-1], 1,1)), substring(s[-1], 2),
sep="", collapse=" "),
collapse = " "
)
}
sapply(name, capExceptFirst)
输出:
zip code state final count
"zip Code" "state " "final Count"
答案 2 :(得分:2)
使用一些基本的正则表达式:
name <- c("zip code", "state", "final count")
gsub("\\s([a-z])", " \\U\\1", name, perl = TRUE)
# [1] "zip Code" "state" "final Count"
允许使用非ascii字母:
name <- c("zip code", "state", "final count", "uribe álvaro")
gsub("\\s(\\p{L})", " \\U\\1", name, perl = TRUE)
# [1] "zip Code" "state" "final Count" "uribe Álvaro"