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

R语言使用mutate提取正则全匹配并拼接的简化方案求教

实现方案

str_extract_all返回的是列表类型的结果,每一个元素是对应行的所有匹配结果向量。你之前直接用paste拼接的问题在于,paste默认会把整个列表作为输入处理,而非按行逐个处理列表内的向量,所以会出现所有行的结果都混在一起的异常输出。

直接用purrr::map_chr对每一行的匹配结果单独执行拼接即可,代码非常简洁,不需要嵌套unnest_wider和unite操作:

library(tidyverse)

# 示例数据
df <- tibble(
  phrase = c(
    "I like apples. I love apple pies. An apple a day...", 
    "I hate apples. Specially apple pies"
  )
)

# 核心实现
df <- df %>% 
  mutate(
    output = str_extract_all(phrase, '\\b[[:alpha:]]+\\b(?=\\sapple)') %>% 
      map_chr(~ paste(.x, collapse = "; "))
  )

运行后得到的结果和预期完全一致:

# A tibble: 2 × 2
  phrase                                              output         
  <chr>                                               <chr>          
1 I like apples. I love apple pies. An apple a day... like; love; An 
2 I hate apples. Specially apple pies                 hate; Specially

如果习惯用base R语法,也可以用sapply替代map_chr:

df$output <- sapply(
  str_extract_all(df$phrase, '\\b[[:alpha:]]+\\b(?=\\sapple)'),
  function(x) paste(x, collapse = "; ")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:51:01