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字符串
处理后的数据效果
执行上述代码后,你的数据框会变成预期的样子:
| id | Date | Code |
|---|---|---|
| ExcelFile/CP1213_.xlsx | 2013-05-09 | CP1213 |
| ExcelFile/CP1213_.xlsx | 2013-01-30 | CP1213 |
| ExcelFile/CP1314_.xlsx | 2013-02-14 | CP1314 |
| ExcelFile/CP1314_.xlsx | 2013-03-19 | CP1314 |
| ExcelFile/CP1415_.xlsx | 2013-02-22 | CP1415 |
| ExcelFile/CP1415_.xlsx | 2013-02-22 | CP1415 |
内容的提问来源于stack exchange,提问作者ranaz
相关产品推荐
相关产品推荐

