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

R语言合并多txt文件为数据框并按文件名重命名raw_counts列

基因定量文件批量合并修正方案

你原有代码的核心问题是未在单文件读取阶段完成列筛选、列重命名就直接合并,导致同名列自动追加.x/.y后缀,后续替换不仅繁琐还容易出错。最优方案是把列处理、重命名操作前置到读取单文件的步骤中,从根源避免列名冲突,实现代码如下:

完整可运行代码

library(tidyverse)

# 配置文件存储路径
file_path <- "/Target_Data/TARGET_FHCRC/"
# 匹配目标定量文件
all_files <- dir(file_path)
target_files <- grep(all_files, pattern = "^T.*gene.quantification.txt$", value = TRUE)

# 批量读取文件,同步完成列筛选、列重命名
df_list <- map2(
  .x = target_files,
  # 提取样本ID:删除文件名末尾固定的.gene.quantification.txt后缀
  .y = str_remove(target_files, "\\.gene\\.quantification\\.txt$"),
  .f = ~{
    # 读取单个定量文件
    single_df <- read.delim(
      file = file.path(file_path, .x),
      stringsAsFactors = FALSE,
      check.names = FALSE,
      row.names = NULL
    )
    # 仅保留gene、raw_counts两列,直接丢弃不需要的RPKM、median_length_normalized列
    single_df <- single_df[, c("gene", "raw_counts")]
    # 重命名raw_counts列为带样本ID的唯一列名
    colnames(single_df)[2] <- paste0("raw_counts_", .y)
    return(single_df)
  }
)

# 按共有gene列合并所有样本,无列名冲突问题
merge_result <- df_list %>% reduce(inner_join, by = "gene")

关键逻辑说明

  • 列裁剪前置:单文件读取时就丢弃不需要的两列指标,相比合并后再删列更省内存,也不会产生多余的重名列
  • 样本ID提取:通过正则直接删除固定后缀得到样本ID,适配所有符合命名规则的定量文件,不会出现ID提取错误
  • 列重命名前置:每个文件的count列在合并前就设置为唯一列名,合并时不会触发R自动加.x/.y后缀的机制,完全不需要后续用正则批量替换后缀,避免替换失误
  • 路径拼接:用file.path()拼接文件目录和文件名,避免因为工作路径设置不对导致的文件读取失败问题

扩展调整

  • 如果需要保留所有文件中出现的基因(而非仅保留所有样本共有的基因),将合并步骤的inner_join替换为full_join即可
  • 如果需要按样本顺序排列列,可以在合并完成后通过列名排序调整顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:06:19