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

R语言如何按文件名部分匹配对数据框执行rbind合并

同前缀样本合并导出R代码实现

你原有逻辑的核心问题是单样本合并后的all_annotation没有持久存储,后续无法匹配前缀做批量合并,需要先把所有单样本合并结果存到列表中,再执行前缀匹配按行合并,完整实现代码如下:

library(dplyr)

# 原有文件定义不变
anno_files<-c("R1000A_v1.hg19_multianno.txt", "R1000B_v1.hg19_multianno.txt" ,"R1000C_v1.hg19_multianno.txt", "RC1080A_v1.hg19_multianno.txt", "RC1080B_v1.hg19_multianno.txt" )
cancer_files<-c("R1000A_v1.hg19_multianno.txt.cancervar", "R1000B_v1.hg19_multianno.txt.cancervar" ,"R1000C_v1.hg19_multianno.txt.cancervar", "RC1080A_v1.hg19_multianno.txt.cancervar", "RC1080B_v1.hg19_multianno.txt.cancervar")

# 提取样本名(简化原有循环写法)
samples <- sapply(anno_files, function(x) unlist(strsplit(x, "\\."))[1], USE.NAMES = F)

# 读取文件逻辑不变
myfilelist <- lapply(anno_files, read.delim, header=T)
myfilelist2 <- lapply(cancer_files, read.csv, sep="\t", header=T)

# 新增:存储所有单样本合并结果的列表,避免循环中变量被覆盖
all_sample_merged <- list()

# 原有单样本合并逻辑修改
for (i in 1:length(myfilelist)){
  all_annotation <- left_join(myfilelist[[i]], myfilelist2[[i]], by = c("Chr","Start","End","Ref","Alt"))
  all_annotation$sample_id <- samples[i]
  # 把当前样本合并结果存入列表
  all_sample_merged[[i]] <- all_annotation
  # 保留原有单样本导出需求
  write.csv(all_annotation, paste0("data/", samples[i], ".merged.csv"), row.names = F)
}

# 你原有提取样本前缀的逻辑,简化后写法不变,输出为 "R1000" "RC1080"
samples2 <- unique(sapply(samples, function(x) {
  filename2_id <- unlist(strsplit(x, "\\_"))[1]
  substr(filename2_id, 1, nchar(filename2_id)-1)
}, USE.NAMES = F))

# 你需要的前缀匹配合并导出逻辑
for (j in 1:length(samples2)){
  current_prefix <- samples2[j]
  # 匹配所有sample_id以当前前缀开头的样本,和你的需求完全对应
  match_index <- grep(paste0("^", current_prefix), sapply(all_sample_merged, function(df) unique(df$sample_id)))
  # 提取所有匹配到的样本表
  match_dfs <- all_sample_merged[match_index]
  # 按行合并,用bind_rows比基础rbind兼容性更好,自动适配列顺序/列数差异
  prefix_merged <- bind_rows(match_dfs)
  # 导出同前缀合并后的文件
  write.csv(prefix_merged, paste0("data/", current_prefix, "_all_samples_merged.csv"), row.names = F)
}

关键逻辑说明

  • 单样本结果持久化:新增all_sample_merged列表存储所有单样本合并后的表,避免循环过程中变量被覆盖丢失
  • 前缀匹配规则:用grep加正则^匹配sample_id开头为当前前缀的样本,不会误匹配到中间包含前缀字符的无关样本;如果需要匹配任意位置包含前缀的样本,删掉^即可
  • 合并兼容性:用dplyr::bind_rows替代基础rbind,自动处理不同表之间列数、列顺序不一致的情况,避免合并报错
  • 导出命名规则:同前缀合并后的文件统一用前缀_all_samples_merged.csv命名,和单样本结果做明确区分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:15:03