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

在R中实现文件名列表中月份名称转数值的函数(含字典映射)

解决方案:用命名向量实现月份替换并重构文件名

完全可以用命名向量(即你所说的“字典”)来实现这个需求,以下是具体实现代码和说明:

1. 定义基础数据与映射规则

保留你原始的文件名列表和月份映射向量:

library(stringr)

# 原始文件名列表
f <- c("cm18OCT2023.csv", "cm22NOV2023.csv")

# 月份名称到数字的映射(命名向量)
month_text <- c(
  "JAN" = "01", "FEB" = "02", "MAR" = "03", "APR" = "04",
  "MAY" = "05", "JUN" = "06", "JUL" = "07", "AUG" = "08",
  "SEP" = "09", "OCT" = "10", "NOV" = "11", "DEC" = "12"
)

2. 实现文件名转换函数

编写函数,通过正则匹配提取文件名中的日、月份、年份,结合命名向量替换月份后重构目标格式:

rename_files <- function(file_names, month_map) {
  # 正则捕获:提取日(dd)、月份(MMM)、年份(yyyy)
  pattern <- "^cm(\\d{2})([A-Z]{3})(\\d{4})\\.csv$"
  
  str_replace_all(file_names, pattern, function(match) {
    dd <- str_match(match, pattern)[,2]
    mmm <- str_match(match, pattern)[,3]
    yy <- str_sub(str_match(match, pattern)[,4], 3, 4)
    mm <- month_map[mmm]
    
    paste0(yy, mm, dd, ".csv")
  })
}

3. 调用函数生成结果

newnames <- rename_files(f, month_text)
print(newnames)
# 输出:[1] "231018.csv" "231122.csv"

简化实现方案

如果文件名格式固定,也可以先替换月份再直接提取拼接:

# 先替换文件名中的月份为数字
temp_names <- str_replace_all(f, month_text)
# 提取对应部分拼接成目标格式
newnames <- paste0(
  str_sub(temp_names, 8, 9),  # 年份后两位
  str_sub(temp_names, 5, 6),  # 替换后的月份数字
  str_sub(temp_names, 3, 4),  # 日
  ".csv"
)

关键说明

  • 命名向量month_text完美适配“字典”需求,str_replace_all可直接用它完成匹配替换
  • 正则匹配的方式更鲁棒,能避免因字符串位置变动导致的错误
  • 函数化实现可直接复用在任意同格式的文件名列表上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:07:50