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

在R语言中用正则按第二个竖线和第二个T分割数据列

基于tidyverse与正则的单列DataFrame拆分方案

解决方案代码

library(tidyverse)

# 示例数据
ids <- c("ETC|HMPI01000001|HMPI01000001.1 TAG: Genus Species, T05X3Ml2_CL10007Cordes1_1",
         "ETC|HMPI31000002|HMPI31000002.1 TAG: Genus Species, T3X3Ml2_CL10157Cordes1_1", 
         "ETC|HMPI01000007|HMPI01000007.1 TAG: Genus Species, T1X3Ml2_CL11231Cordes1_1")
df <- as.data.frame(ids)

# 执行拆分
df_split <- df %>%
  extract(
    col = ids, 
    into = c("var1", "var2"), 
    regex = "^[^|]+\\|[^|]+\\|([^\\s]+).*?(T\\S+)",
    remove = FALSE # 保留原列用于验证,不需要可设为TRUE
  )

# 查看结果
print(df_split)

代码说明

  1. 工具选择:使用tidyverse中的extract函数,它通过正则捕获组直接提取目标片段,比separate更适合这种精准匹配场景。
  2. 正则表达式解析:
    • ^[^|]+\\|:匹配开头到第一个竖线的内容(如ETC|)
    • [^|]+\\|:匹配第二个竖线之前的内容(如HMPI01000001|)
    • ([^\\s]+):第一个捕获组,匹配第二个竖线后到第一个空格前的所有非空格字符(即目标var1)
    • .*?:非贪婪匹配中间的冗余内容(如TAG: Genus Species,),避免过度匹配
    • (T\\S+):第二个捕获组,匹配以T开头的所有非空白字符(即目标var2)

预期输出

ids             var1                     var2
1 ETC|HMPI01000001|HMPI01000001.1 TAG: Genus Species, T05X3Ml2_CL10007Cordes1_1 HMPI01000001.1 T05X3Ml2_CL10007Cordes1_1
2 ETC|HMPI31000002|HMPI31000002.1 TAG: Genus Species, T3X3Ml2_CL10157Cordes1_1 HMPI31000002.1 T3X3Ml2_CL10157Cordes1_1
3 ETC|HMPI01000007|HMPI01000007.1 TAG: Genus Species, T1X3Ml2_CL11231Cordes1_1 HMPI01000007.1 T1X3Ml2_CL11231Cordes1_1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:15:11