You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中提取字符串首字母(排除最后一个单词)的最优方法

嘿,这个字符串处理需求挺实用的!我来给你分享几个在R里实现的靠谱方法,针对你的数据框场景,直接就能套用:

方法1:用stringr包(简洁易读,首推)

stringr是tidyverse家族里专门搞字符串的工具包,语法特别直观,新手也能快速上手:

首先得加载包:

library(stringr)

然后直接处理你的NAMES数据框:

NAMES$result <- str_replace_all(NAMES$ID, 
                                "^((\\w+)\\s+)+(\\w+)$", 
                                function(x) {
                                  # 把字符串按空格拆成单词列表
                                  words <- str_split(x, "\\s+")[[1]]
                                  # 提取除最后一个单词外的所有首字母,拼接成串
                                  initials <- str_sub(words[-length(words)], 1, 1) %>% str_c(collapse = "")
                                  # 把首字母和最后一个单词用空格连起来
                                  str_c(initials, words[length(words)], sep = " ")
                                })

运行完之后,NAMES$result就是你要的结果:"GS BROGAN", "AS WILLIS", "UIS STATION"

方法2:基础R原生实现(不用装额外包)

要是你不想加载第三方包,用基础R的函数也能搞定,逻辑和上面一致:

NAMES$result <- sapply(NAMES$ID, function(x) {
  words <- strsplit(x, "\\s+")[[1]]
  # 兼容一下只有单个单词的情况(虽然你的数据里没有,但多做一步总是稳的)
  if (length(words) == 1) {
    return(x)
  }
  # 提取首字母并拼接
  initials <- paste(substr(words[-length(words)], 1, 1), collapse = "")
  # 拼接首字母和最后一个单词
  paste(initials, words[length(words)], sep = " ")
})
方法3:正则表达式一步到位(高效简洁)

如果追求极致简洁,用正则表达式可以一行搞定,不过得稍微理解下正则逻辑:

NAMES$result <- str_replace(NAMES$ID, 
                            "\\b(\\w)\\w*\\s+(?=.*\\s)", 
                            "\\1")

这个正则的意思是:匹配每个不是最后一个的单词,只保留它的首字母,把单词剩下的部分和空格替换掉,最后就自动得到首字母拼接+最后一个单词的结果啦。

这几种方法都能完美输出你想要的结果,其中方法1最容易维护,适合日常使用;方法3最精简,适合喜欢正则的小伙伴;方法2则是无依赖的原生方案。

内容的提问来源于stack exchange,提问作者Curious

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:03:57