2017-05-18 122 views
1

我必须用新字符串中的9个单词写入字符串的全部首字母。 有没有更好的办法做到这一点比:将字符串中所有单词的第一个字母写入新字符

eg <- "This is a test I developed" 
    temp.eg <- strsplit(eg,' ')[[1]] 
    temp.eg <- substr(temp.eg, 0, 1) 
    new.eg <- paste(temp.eg, collapse = "") 

此外,有没有分割线的另一种方式,所以我没有用:

strsplit() [[1]] 
+2

您的解决方案对我来说很好。你的意思是“有更好的办法”吗? –

+0

http://stackoverflow.com/questions/9721052/r-extract-part-of-string可能的重复 – akrun

回答

3

您可以使用GSUB提取第一个字母和单词边界(\\b):

gsub("\\b(\\w)(\\b|(\\w+))(|$)", "\\1", eg) 
[1] "TiatId" 

说明:你问了一个 “字” CHARAC ter(\\w),后面是单词边界,后面跟着单词边界或更多单词字符,然后是空格或字符串的末尾($)。


通过@lukeA给出另一种选择:

gsub("(?<!\\b).|\\s", "", eg, perl=TRUE) 
[1] "TiatId" 

它采用向后看(?<!:之前一定不能...)为 “抑制”(被取代空字符串)任何或任何不是字边界的空格。

3

为了避免[[子集,我们可以使用unlist,你的代码的其余部分看起来很好:

paste(substr(unlist(strsplit(eg, " ")), 1, 1), collapse = "") 
# [1] "TiatId" 

如果我们有一个以上的字符串:

egLong <- c("This is a test I developed", "another test me") 

sapply(strsplit(egLong, " "), function(i){ 
    paste(substr(i, 1, 1), collapse = "") 
    }) 
# [1] "TiatId" "atm" 
相关问题