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

R语言:从文件路径提取字符新增DataFrame的Code列

提取文件路径中的Code列解决方案

你已经完成了多Excel文件的读取与合并,接下来只需通过正则表达式从id列的文件路径中提取目标Code即可,这里提供两种适配你现有代码的实现方式:

方法1:使用tidyverse生态(推荐,与你现有代码风格一致)

既然你已经在使用dplyr的bind_rows,搭配stringr包的字符串提取函数会非常顺手:

library(readxl)
library(dplyr)
library(stringr)

# 读取并合并Excel文件
files <- list.files(path = "ExcelFile/", pattern = "*.xlsx", full.names = T)
tbl <- sapply(files, read_excel, simplify=FALSE) %>% 
  bind_rows(.id = "id") %>%
  # 新增Code列:提取id中CP开头+4位数字的部分
  mutate(Code = str_extract(id, "CP\\d{4}"))

正则说明

"CP\\d{4}" 专门匹配以CP开头,后跟4位数字的字符串,完美匹配你需要的CP1213、CP1314这类格式。如果后续Code的数字长度有变化,只需把\\d{4}改成\\d+(匹配任意长度数字)即可。

方法2:使用Base R(无需额外加载包)

如果不想引入新包,用Base R的sub函数也能实现:

# 在已合并的tbl数据框中新增Code列
tbl$Code <- sub(".*(CP\\d{4}).*", "\\1", tbl$id)

正则说明

  • .* 匹配任意数量的任意字符(用来跳过路径中Code之前的内容)
  • (CP\\d{4}) 是我们要捕获的目标内容(用括号标记为捕获组)
  • \\1 引用第一个捕获组的内容,最终只保留我们需要的Code字符串

处理后的数据效果

执行上述代码后,你的数据框会变成预期的样子:

idDateCode
ExcelFile/CP1213_.xlsx2013-05-09CP1213
ExcelFile/CP1213_.xlsx2013-01-30CP1213
ExcelFile/CP1314_.xlsx2013-02-14CP1314
ExcelFile/CP1314_.xlsx2013-03-19CP1314
ExcelFile/CP1415_.xlsx2013-02-22CP1415
ExcelFile/CP1415_.xlsx2013-02-22CP1415

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:01:57