从字符串中获取首字母

时间:2014-07-18 20:48:21

标签: r

我有什么:

names <- c("First Last", "First M Last", "First M. Last", "first Last", "first lAst")

我想要的是什么:

"FL" "FML" "FML" "FL" "FL"

我尝试了什么:

paste(substr(strsplit(names, " ")[[1]], 1, 1), collapse="")

这给出了什么:

FL

如何为所有元素获取此内容?

3 个答案:

答案 0 :(得分:4)

> names <- c("First Last", "First M Last", "First M. Last", 
             "first Last", "first lAst")

看起来你想要结果都是大写的?如果是这种情况,我们可以在touppersapply使用与您尝试过的代码类似的代码。

> s <- strsplit(names, " ")
> sapply(s, function(x){
      toupper(paste(substring(x, 1, 1), collapse = ""))
  })
# [1] "FL"  "FML" "FML" "FL"  "FL" 

答案 1 :(得分:1)

如果您对每个元素运行自己的逻辑,则会得到所需的结果:

sapply( names, function(x)
                  paste(substr(strsplit(x, " ")[[1]], 1, 1), collapse="") )

如果您不喜欢名称,可以unname结果:

> unname(sapply( names, function(x)
+ paste(substr(strsplit(x, " ")[[1]], 1, 1), collapse="") ))
[1] "FL"  "FML" "FML" "fL"  "fl" 

或使用USE.NAMES参数:

> sapply( names, function(x)
+ paste(substr(strsplit(x, " ")[[1]], 1, 1), collapse="") , USE.NAMES=FALSE)
[1] "FL"  "FML" "FML" "fL"  "fl" 

答案 2 :(得分:0)

这是使用正则表达式的另一种选择:

# find letters preceded by a space (\\s) or the beginning of the string (^)
regex <- '(?<=^|\\s)[[:alpha:]]' 
initials <- regmatches(names, gregexpr(regex, names, perl=TRUE))
toupper(sapply(initials, paste0, collapse=''))
# [1] "FL"  "FML" "FML" "FL"  "FL"