【问题标题】:Write first letters of all words from a string into a new one将字符串中所有单词的首字母写入一个新单词
【发布时间】:2017-05-18 09:23:55
【问题描述】:

我必须在一个新字符串中写入一个包含 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]]

【问题讨论】:

标签: r


【解决方案1】:

为了避免[[ 子集,我们可以使用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" 

【讨论】:

    【解决方案2】:

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

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

    解释:您要求在单词边界之后出现一个“单词”字符 (\\w),然后是单词边界或更多单词字符,然后是空格或字符串的结尾 ($)。


    @lukeA 给出的另一个选项:

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

    它使用look-behind (?&lt;!: before must not be...) 来“抑制”(替换为空字符串)任何内容或任何非单词后面的空格边界。

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2016-02-15
      • 2015-12-10
      • 1970-01-01
      • 2014-06-19
      • 2014-05-19
      • 2021-09-07
      相关资源
      最近更新 更多