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

如何在R语言中判断字符串是否以指定词干开头并返回匹配词干

解决方法

可以借助tidyverse工具包中的stringr和purrr实现需求,以下提供两种实用方案:

方案1:构造统一正则模式(简洁高效)

将词干列表转换为匹配字符串开头的正则表达式,用str_extract()直接提取匹配的词干:

library(tidyverse)

stems <- c("fri", "odd", "inspi")
dat <- tibble(complete_word = c("fright", "todd", "quirky", "oddly"))

# 拼接正则模式:^表示匹配字符串开头,|分隔多个候选词干
stem_pattern <- str_c("^(", str_c(stems, collapse = "|"), ")")

dat <- dat %>%
  mutate(stem = str_extract(complete_word, stem_pattern))

# 查看结果
dat

运行后输出符合预期:

# A tibble: 4 × 2
  complete_word stem 
  <chr>         <chr>
1 fright        fri  
2 todd          NA   
3 quirky        NA   
4 oddly         odd  

方案2:逐词干匹配(逻辑灵活)

通过map_chr()遍历每个单词,用str_starts()检查是否匹配词干列表中的项,返回首个匹配的词干或NA:

library(tidyverse)

stems <- c("fri", "odd", "inspi")
dat <- tibble(complete_word = c("fright", "todd", "quirky", "oddly"))

dat <- dat %>%
  mutate(stem = map_chr(complete_word, ~{
    # 筛选出当前单词开头匹配的词干
    matched <- stems[str_starts(.x, stems)]
    # 有匹配则返回词干,否则返回NA
    if (length(matched) > 0) matched else NA_character_
  }))

# 查看结果
dat

关于str_starts()的使用误区

直接给str_starts()传入词干列表时,它会返回一个逻辑矩阵(每行对应一个单词,每列对应一个词干的匹配结果),而非直接返回匹配的词干。上面两种方案分别通过正则整合或筛选逻辑,解决了这个问题,最终得到你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:52:40