将字符串中的第一个单词大写的最快方法(基础)

时间:2012-06-19 02:08:10

标签: regex r

使用基本安装功能,最大化文本字符串向量中第一个字母的方法是什么?

我在下面提供了一个解决方案,但它似乎是一种非常低效的方法(使用子字符串并将它们粘贴在一起)。我猜这是一个我没想到的正则表达式解决方案。

一旦我得到一些回复,我将对它们进行基准测试并使用微基准测试报告最快的解决方案。

提前感谢您的帮助。

x <- c("i like chicken.", "mmh so good", NA)
#desired output
[1] "I like chicken." "Mmh so good"     NA  

4 个答案:

答案 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)