如何在R语言中为合并后的DataFrame添加原Excel工作表名称列
解决方案
可以通过以下几种简洁的方式实现需求,核心是在合并过程中保留原工作表的名称信息:
方法一:利用map_dfr的.id参数(推荐)
先给读取后的DataFrame列表添加工作表名称作为列表元素名,再结合.id参数自动生成对应列:
library(readxl) library(dplyr) library(purrr) # 1. 获取Excel文件的所有工作表名称 sheet_names <- excel_sheets("你的文件路径.xlsx") # 2. 读取所有工作表并为列表元素命名(名称对应工作表名) df_named_list <- set_names( map(sheet_names, ~ read_excel("你的文件路径.xlsx", sheet = .x)), sheet_names ) # 3. 筛选数据并合并,同时新增工作表名称列 combined_df <- map_dfr( df_named_list, ~ filter_qval(.x), # 应用你的自定义筛选函数 .id = "comparison_group" # 指定新增列的列名,可按需修改 )
方法二:使用map2_dfr同时遍历名称和数据
通过map2同时传递工作表名称和对应的数据框,筛选后手动添加名称列:
library(readxl) library(dplyr) library(purrr) sheet_names <- excel_sheets("你的文件路径.xlsx") df_list <- map(sheet_names, ~ read_excel("你的文件路径.xlsx", sheet = .x)) combined_df <- map2_dfr( sheet_names, df_list, ~ filter_qval(.y) %>% mutate(comparison_group = .x) )
说明
- 两种方法最终都会生成包含
comparison_group列(或你指定的列名)的合并数据框,该列的值就是每行数据来源的工作表名称 - 确保你的
filter_qval函数能正确接收DataFrame并返回筛选后的结果
内容的提问来源于stack exchange,提问作者PesKchan
相关产品推荐
相关产品推荐

