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

如何基于两种不同分隔符拆分FileName字段并提取生成多列数据

解答

你之前的代码存在几个问题:

  • strsplit() 返回的是列表结构,无法直接传入第二个strsplit()做二次拆分
  • 正则匹配中.属于元字符,会匹配任意单字符,要匹配真实的点分隔符需要转义为\\.
  • 手动通过[[索引]]逐个提取列表值可以实现需求,但代码冗余,tidyverse有更简洁的内置函数可以一步完成拆分

你可以直接使用tidyr的separate函数,指定分隔符为下划线或点,一次拆分出所有需要的字段,代码如下:
首先加载依赖包:

library(tidyverse)

核心处理代码:

result <- file %>%
  # remove = FALSE 保留原始FileName列,sep参数用正则匹配下划线或点作为分隔符
  separate(FileName, into = c("ID", "Name", "BioType", "FileNo", "Extension"), sep = "_|\\.", remove = FALSE) %>%
  # 调整列顺序和期望输出一致
  select(FileName, Date, ID, Name, BioType, FileNo, Extension)

如果使用的是tidyr 1.2.0及以上版本,也可以用更易维护的separate_wider_delim分步拆分,适配更复杂的文件名格式:

result <- file %>%
  separate_wider_delim(FileName, delim = "_", names = c("ID", "Name", "BioType", "tmp"), too_many = "merge") %>%
  separate_wider_delim(tmp, delim = ".", names = c("FileNo", "Extension")) %>%
  select(FileName, Date, ID, Name, BioType, FileNo, Extension)

两种方法运行后得到的结果都和你期望的输出结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:54:01