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

R语言合并CSV需求:添加文件名列并提取指定行后合并

没问题,这两个需求都可以通过调整你现有的R代码轻松实现,我来给你一步步说明怎么做:

完整解决方案代码

首先是整合了两个需求的完整代码,你可以直接拿来用,之后我会拆解每部分的作用:

# 获取当前工作目录及子文件夹下的所有.csv文件
csv_files <- dir(pattern='.*[.]csv', recursive=TRUE)

# 自定义读取函数:实现读取指定行 + 添加文件名列
read_custom_csv <- function(file_path) {
  # 读取文件的第5至10行(可根据需要修改行数)
  # skip=4 表示跳过前4行,nrows=6 表示读取接下来的6行(5-10共6行)
  df <- read.csv(file_path, skip = 4, nrows = 6)
  
  # 添加一列存储对应文件名(用basename只保留文件名,去掉完整路径)
  df$filename <- basename(file_path)
  
  return(df)
}

# 遍历所有CSV文件,应用自定义函数并合并成一个数据框
my_data_frame <- do.call(rbind, lapply(csv_files, read_custom_csv))

代码细节解释

  • 获取CSV文件:这部分和你原来的代码一致,dir(recursive=TRUE)会递归查找所有子文件夹里的CSV文件。
  • 自定义读取函数:把读取逻辑封装成函数让代码更清晰:
    • 读取指定行:skip=4是因为要从第5行开始读取,所以跳过前4行;nrows=6对应第5到10行的总行数(10-5+1=6)。如果需要调整行数范围,比如要读第3-7行,就改成skip=2, nrows=5。
    • 添加文件名列:basename(file_path)会去掉文件的完整路径,只保留文件名(比如把./subfolder/data.csv变成data.csv),如果需要保留完整路径,直接用df$filename <- file_path即可。
  • 合并数据框:还是用你熟悉的lapply+do.call(rbind)组合,把所有处理好的小数据框合并成一个大的。

特殊情况处理(如果CSV有表头)

如果你的CSV文件第一行是表头,但你要读取的第5-10行是数据行,上面的代码可能会把第5行当成表头。这种情况下,需要先单独读取表头,再给数据行赋值表头:

read_custom_csv <- function(file_path) {
  # 先读取第一行作为表头
  header <- read.csv(file_path, nrows = 1, header = FALSE)
  
  # 读取第5-10行,不自动识别表头
  df <- read.csv(file_path, skip = 4, nrows = 6, header = FALSE)
  
  # 给数据框设置正确的表头
  colnames(df) <- header
  
  # 添加文件名列
  df$filename <- basename(file_path)
  
  return(df)
}

这样就能保证数据的表头和原始文件一致啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:49:19