如何基于列表名称信息重命名R语言列表中的值
R语言文件名重命名实现方法
方法1:使用Base R正则表达式处理
先定义原始文件名向量:
files <- c("JSMITH_WWWFRecvd2001_asof_20220901.xlsx", "WSMITH_AMEXRecvd2002_asof_20220901.xlsx", "PSMITH_WWWFRecvd2003_asof_20220901.xlsx", "QSMITH_AMEXRecvd2004_asof_20220901.xlsx")
用gsub配合正则提取目标内容并格式化:
new_names <- tolower(gsub(".*_(WWWF|AMEX)Recvd20(\\d{2})_.*\\.xlsx", "\\1_\\2", files))
执行后得到结果:
> new_names [1] "wwwf_01" "amex_02" "wwwf_03" "amex_04"
正则表达式说明:
.*_:匹配下划线之前的所有字符(含下划线)(WWWF|AMEX):捕获第一个目标分组,匹配"WWWF"或"AMEX"Recvd20:匹配文件名中固定的"Recvd20"字符串(\\d{2}):捕获第二个目标分组,提取年份的最后两位数字_.*\\.xlsx:匹配从下划线开始到.xlsx结尾的所有剩余字符\\1_\\2:将两个捕获组的内容用下划线连接作为替换结果tolower():将最终结果转为小写
方法2:使用stringr包(tidyverse生态)
如果习惯用tidyverse工具,可通过stringr::str_replace实现相同逻辑:
# 未安装包先执行:install.packages("stringr") library(stringr) new_names <- tolower(str_replace(files, ".*_(WWWF|AMEX)Recvd20(\\d{2})_.*\\.xlsx", "\\1_\\2"))
运行后得到的结果与方法1完全一致。
内容的提问来源于stack exchange,提问作者user35131
相关产品推荐
相关产品推荐

