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

在R中读取不同文件夹下的.tsv文件并添加文件夹名列

嘿,这个批量处理的需求我太熟了!395个文件夹手动加列绝对是噩梦,下面给你两种方案,都能自动把文件夹名称加到数据框里,一步到位合并所有文件:

方案一:用tidyverse工具链(推荐,简洁高效)

tidyverse里的readr和purrr包能帮你快速完成读取、添加列、合并的全流程:

# 先安装并加载tidyverse(如果还没装的话)
if (!require("tidyverse")) install.packages("tidyverse")
library(tidyverse)

# 1. 获取所有file.tsv的完整路径
file_paths <- list.files(
  path = "A:/output", 
  pattern = "^file\\.tsv$",  # 精确匹配文件名,避免误抓类似file1.tsv的文件
  recursive = TRUE,          # 递归遍历所有子文件夹
  full.names = TRUE          # 返回完整文件路径(而非仅文件名)
)

# 2. 批量读取文件,自动添加folder列并合并
combined_df <- map_dfr(file_paths, function(file_path) {
  # 从路径中提取文件夹名称:取路径的倒数第二部分
  folder_name <- basename(dirname(file_path))
  # 读取tsv文件,然后新增folder列
  read_tsv(file_path) %>% 
    mutate(folder = folder_name)
})

# 查看合并后的结果
head(combined_df)

方案说明

  • map_dfr()会自动把每个文件生成的小数据框按行合并,省去手动rbind的麻烦
  • basename(dirname(file_path))是提取文件夹名的关键:dirname()先得到文件所在的文件夹路径(比如A:/output/Folder1),basename()再提取路径的最后一段,就是你要的Folder1
  • read_tsv()比base R的read.table更快,且默认不会把字符串转成因子,处理数据更省心

方案二:Base R实现(无需额外安装包)

如果你不想装新包,用base R也能完成:

# 1. 获取所有file.tsv的完整路径
file_paths <- list.files(
  path = "A:/output", 
  pattern = "^file\\.tsv$", 
  recursive = TRUE, 
  full.names = TRUE
)

# 2. 初始化空列表,用来存储每个文件的数据框
df_list <- list()

# 3. 遍历每个文件,读取并添加folder列
for (i in seq_along(file_paths)) {
  current_path <- file_paths[i]
  # 提取文件夹名称
  folder_name <- basename(dirname(current_path))
  # 读取tsv文件(注意sep="\t"指定分隔符,header=TRUE表示第一行是列名)
  current_df <- read.table(
    current_path, 
    sep = "\t", 
    header = TRUE, 
    stringsAsFactors = FALSE
  )
  # 添加folder列
  current_df$folder <- folder_name
  # 把当前数据框加入列表
  df_list[[i]] <- current_df
}

# 4. 合并所有数据框
combined_df <- do.call(rbind, df_list)

# 查看结果
head(combined_df)

关键细节提醒

  1. 文件格式一致性:确保所有file.tsv的列名、列数和数据类型一致,否则合并时可能报错。如果有格式不一致的文件,可以在读取时用col_types(tidyverse)或colClasses(base R)统一指定列类型
  2. 路径匹配准确性:pattern = "^file\\.tsv$"是正则表达式,确保只匹配文件名恰好是file.tsv的文件,避免匹配到类似file_backup.tsv的文件
  3. 大文件处理:如果单个文件很大,推荐用read_tsv,它的内存效率更高,处理速度更快

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:28