如何在R中循环合并带相同后缀的INFO与DATA数据框?
用循环批量合并INFO与DATA对应工作表数据
当然可以用循环批量搞定,不用重复写相同代码,给你两种实用的实现方式:
方式一:for循环
先定义要处理的编号范围(比如你有2组数据就写1:2,可根据实际修改),循环读取对应工作表并合并,最后把结果存到列表里方便管理:
library(readxl) File <- "path to excel" # 定义要处理的组数范围,可按需修改 num_groups <- 1:2 # 创建空列表存储合并后的结果 PCR_list <- list() for(i in num_groups) { # 动态生成工作表名称 info_sheet <- paste0("INFO", i) data_sheet <- paste0("DATA", i) # 读取对应工作表数据 INFO <- read_excel(File, sheet = info_sheet) DATA <- read_excel(File, sheet = data_sheet) # 合并数据并存入列表 PCR_list[[i]] <- merge(INFO, DATA) } # 可选:把列表里的结果转为单独的PCR1、PCR2变量 for(i in num_groups) { assign(paste0("PCR", i), PCR_list[[i]]) }
方式二:lapply函数(更简洁的R风格写法)
用lapply可以省去手动管理循环索引的步骤,代码更紧凑:
library(readxl) File <- "path to excel" num_groups <- 1:2 PCR_list <- lapply(num_groups, function(i) { INFO <- read_excel(File, sheet = paste0("INFO", i)) DATA <- read_excel(File, sheet = paste0("DATA", i)) merge(INFO, DATA) }) # 可选:将列表元素转为全局环境中的单独变量 names(PCR_list) <- paste0("PCR", num_groups) list2env(PCR_list, envir = .GlobalEnv)
额外提示
- 默认
merge会按所有同名列合并数据,如果需要指定特定合并列,可添加by = "你的列名"参数,比如merge(INFO, DATA, by = "样本ID") - 如果不确定具体有多少组数据,可以先读取所有工作表名称再自动提取编号:
all_sheets <- excel_sheets(File) info_sheets <- grep("^INFO", all_sheets, value = TRUE) # 从INFO1、INFO2中提取数字编号 nums <- gsub("INFO", "", info_sheets)
内容的提问来源于stack exchange,提问作者HPell
相关产品推荐
相关产品推荐

