R语言合并多CSV文件时如何保留文件夹路径为Site列
解决方案
以下是修改后的R代码,可实现从WaterTemp文件夹递归读取所有子CSV文件、提取前3列、统一表头并新增Site列存储文件所在文件夹路径:
# 设置根路径为WaterTemp文件夹 y_path <- "Y:\\Public\\xx\\DataLoggers\\WaterTemp\\" # 递归遍历所有子文件夹,获取所有CSV文件的完整路径 all_csv <- list.files(path = y_path, pattern = '.csv$', full.names = TRUE, recursive = TRUE) # 批量读取文件,同时处理列提取、表头设置和Site列添加 open_csv <- lapply(all_csv, function(x) { # 读取文件,跳过前2行 dt <- data.table::fread(x, skip=2) # 提取前3列 dt <- dt[, 1:3] # 设置统一表头 data.table::setnames(dt, c("numb", "datetime", "temp")) # 添加Site列,值为当前文件所在的文件夹路径 dt[, Site := dirname(x)] return(dt) }) # 合并所有数据表格 one_df <- data.table::rbindlist(open_csv, fill=TRUE) # 查看结果 one_df
关键修改说明
- 递归读取文件:
list.files添加recursive=TRUE参数,自动遍历WaterTemp下所有子文件夹的CSV文件;pattern='.csv$'确保只匹配后缀为.csv的文件,避免误匹配。 - Site列生成:通过
dirname(x)获取当前文件的父文件夹路径,直接添加为新列,无需额外处理。 - 简化流程:将列提取、表头设置和Site列添加整合到文件读取的循环中,减少中间变量,提升代码效率。
预期输出示例
numb datetime temp Site <int> <char> <num> <char> 1: 1 6/30/2014 13:37 17.272 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A 2: 2 6/30/2014 14:37 18.438 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A 3: 3 6/30/2014 15:37 18.152 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A --- 46232: 917 07/29/24 03:41:52 PM 13.269 Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A 46233: 918 07/29/24 04:10:09 PM NA Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A 46234: 919 07/29/24 04:10:12 PM NA Y:\\Public\\Fisher Group\\DataLoggers\\WaterTemp\\DarkCanyon\\DC Trib 1A
内容的提问来源于stack exchange,提问作者Amanda Goldberg
相关产品推荐
相关产品推荐

