使用基本安装功能,最大化文本字符串向量中第一个字母的方法是什么?
我在下面提供了一个解决方案,但它似乎是一种非常低效的方法(使用子字符串并将它们粘贴在一起)。我猜这是一个我没想到的正则表达式解决方案。
一旦我得到一些回复,我将对它们进行基准测试并使用微基准测试报告最快的解决方案。
提前感谢您的帮助。
x <- c("i like chicken.", "mmh so good", NA)
#desired output
[1] "I like chicken." "Mmh so good" NA
答案 0 :(得分:5)
我没有时间,但我打赌这很快
capitalize <- function(string) {
#substring(string, 1, 1) <- toupper(substring(string, 1, 1))
substr(string, 1, 1) <- toupper(substr(string, 1, 1))
string
}
capitalize(x)
#[1] "I like chicken." "Mmh so good" NA
答案 1 :(得分:4)
我认为这将是最慢的,但让它与其他解决方案竞争:
capitalize<-function(string) {
sub("^(.)","\\U\\1", string, perl=TRUE )
}
x <- c("i like chicken.", "mmh so good", NA)
capitalize(x)
编辑:实际上在ideone上它比子串
更快编辑2:匹配任何小写字母都会稍微慢一些:
sub("^(\\p{Ll})","\\U\\1", string, perl=TRUE)
答案 2 :(得分:3)
Hmisc
包中包含capitalize
函数:
> require(Hmisc)
> capitalize(c("i like chicken.", "mmh so good", NA))
[1] "I like chicken." "Mmh so good" NA
(虽然这似乎比substring
和正则表达式版本都慢。)
答案 3 :(得分:1)
我使用子字符串的解决方案:
capitalize <- function(string) {
cap <- function(x) {
if (is.na(x)) {
NA
}
else {
nc <- nchar(x)
paste0(toupper(substr(x, 1, 1)), substr(x,
2, nc))
}
}
sapply(string, cap, USE.NAMES = FALSE)
}
x <- c("i like chicken.", "mmh so good", NA)
capitalize(x)