ATM*_*hew 165 string title-case r
假设我有一个两个单词的字符串,我想把它们都大写.
name <- c("zip code", "state", "final count")
Run Code Online (Sandbox Code Playgroud)
这个Hmisc包有一个capitalize大写第一个单词的函数,但我不确定如何将第二个单词大写.帮助页面capitalize并不表示它可以执行该任务.
library(Hmisc)
capitalize(name)
# [1] "Zip code" "State" "Final count"
Run Code Online (Sandbox Code Playgroud)
我想得到:
c("Zip Code", "State", "Final Count")
Run Code Online (Sandbox Code Playgroud)
三字串怎么样:
name2 <- c("I like pizza")
Run Code Online (Sandbox Code Playgroud)
And*_*rie 161
执行大写的基本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"
Run Code Online (Sandbox Code Playgroud)
编辑适用于任何字符串,无论字数如何:
simpleCap("I like pizza a lot")
[1] "I Like Pizza A Lot"
Run Code Online (Sandbox Code Playgroud)
pet*_*ner 131
标题案例还有一个内置的base-R解决方案:
tools::toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"
Run Code Online (Sandbox Code Playgroud)
要么
library(tools)
toTitleCase("demonstrating the title case")
## [1] "Demonstrating the Title Case"
Run Code Online (Sandbox Code Playgroud)
Mar*_*gan 94
匹配从开头^或开头后开始的正则表达式,[[:space:]]后面跟一个字母字符[[:alpha:]].全局(gsub中的g)用匹配的开头或空格以及匹配的字母字符的大写版本替换所有这些出现\\1\\U\\2.这必须使用perl风格的正则表达式匹配来完成.
gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", name, perl=TRUE)
# [1] "Zip Code" "State" "Final Count"
Run Code Online (Sandbox Code Playgroud)
在替换参数的更多细节中gsub(),\\1说'使用x匹配第一个子表达式的部分',即x匹配的部分(^|[[:spacde:]]).同样,\\2说使用x匹配第二个子表达式的部分([[:alpha:]]).的\\U是使用支持语法perl=TRUE和手段,使下一个字符大写.因此对于"邮政编码",\\1是"Zip",\\2是"代码",\\U\\2是"代码",并且\\1\\U\\2是"邮政编码".
该?regexp页面有助于理解正则表达式,?gsub将事物放在一起.
bar*_*nus 81
从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"
Run Code Online (Sandbox Code Playgroud)
Bri*_*esh 41
替代方案:
library(stringr)
a = c("capitalise this", "and this")
a
[1] "capitalise this" "and this"
str_to_title(a)
[1] "Capitalise This" "And This"
Run Code Online (Sandbox Code Playgroud)
dil*_*iop 21
尝试:
require(Hmisc)
sapply(name, function(x) {
paste(sapply(strsplit(x, ' '), capitalize), collapse=' ')
})
Run Code Online (Sandbox Code Playgroud)
Cha*_*ase 16
从帮助页面?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"
Run Code Online (Sandbox Code Playgroud)
该软件包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!"
Run Code Online (Sandbox Code Playgroud)
使用substring和regexpr的替代方法:
substring(name, 1) <- toupper(substring(name, 1, 1))
pos <- regexpr(" ", name, perl=TRUE) + 1
substring(name, pos) <- toupper(substring(name, pos, pos))
Run Code Online (Sandbox Code Playgroud)
你也可以使用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"
Run Code Online (Sandbox Code Playgroud)
https://github.com/Tazinho/snakecase