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

使用rbindlist合并CSV文件时自动添加年份列的实现

解决方案

基于你现有的data.table代码,可以在读取每个文件时自动从文件名提取年份并添加为新列,修改后的完整代码如下:

library(data.table)
files.to.read <- list.files(path = "./data", 
                            pattern = ".*\\.csv$", 
                            full.names = TRUE, 
                            recursive = FALSE)

# 读取文件时同步添加年份列
L <- lapply(files.to.read, function(file) {
  # 读取当前文件
  dt <- fread(file)
  # 从文件名提取年份:先获取不带路径的文件名,再匹配下划线后两位数字
  year_suffix <- gsub(".*_(\\d{2})\\.csv$", "\\1", basename(file))
  # 转换为完整年份(如19 → 2019)并添加为新列
  dt[, year := as.integer(paste0("20", year_suffix))]
  return(dt)
})

DT <- rbindlist(L, use.names = TRUE, fill = TRUE)

关键步骤说明:

  • 提取纯文件名:用basename(file)去掉文件路径,只保留文件名(比如./data/asdf_19.csv → asdf_19.csv)
  • 正则匹配年份后缀:gsub(".*_(\\d{2})\\.csv$", "\\1", ...) 精准捕获文件名最后一个下划线后的两位数字,作为年份后缀
  • 生成完整年份:通过paste0("20", year_suffix)将两位后缀转为4位完整年份,再转成整数保证数据格式规范
  • 新增年份列:利用data.table的直接赋值语法dt[, year := ...],给每个文件的数据集单独添加年份列,合并时自动保留该字段

如果你的文件名格式有变化(比如年份是4位数字、下划线位置不同),只需调整正则表达式即可。例如文件名是asdf_2019.csv时,可将正则改为".*_(\\d{4})\\.csv$",并去掉paste0("20", ...)步骤,直接转整数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:42:49