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

如何在tidyverse管道的dplyr::mutate中使用stringr::str_match_all

用stringr::str_match_all在tidyverse管道中提取所有匹配内容生成新列

原代码通过stringr::str_match可以提取每行中首次出现"H45"后的1-2位数字并生成新列,示例如下:

library(dplyr)
library(stringr)

df <- tibble::tibble(A = c("H459 A452 H4544", "A452", "H4535"))

df <- df %>% mutate(H45_value = 
           str_match(A, 'H45([0-9]{1,2})') %>% 
           .[,2])

若要提取每行中所有符合"H45"后1-2位数字的内容,直接在管道中使用str_match_all(...) [[1]][,2]无法正常运行——因为str_match_all返回的是列表结构,每行对应一个匹配结果矩阵,需要逐行处理每个矩阵的第二列(捕获组内容)。单独执行str_match_all("H459 A452 H4544", 'H45([0-9]{1,2})')[[1]][,2]可以正常得到结果,但管道中需要结合purrr的映射函数来实现批量处理。

解决方案代码

library(dplyr)
library(stringr)
library(purrr)

df <- tibble::tibble(A = c("H459 A452 H4544", "A452", "H4535"))

df <- df %>% 
  mutate(H45_value = map_chr(A, ~{
    # 提取当前字符串的所有匹配捕获组
    match_results <- str_match_all(.x, 'H45([0-9]{1,2})')[[1]][,2]
    # 无匹配返回NA,否则用逗号拼接结果
    if (length(match_results) == 0) NA_character_ else paste(match_results, collapse = ", ")
  }))

执行后输出

AH45_value
H459 A452 H45449, 44
A452NA
H453535

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:20:16