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
相关产品推荐
相关产品推荐

