R语言使用bind_rows合并Excel提取数据出现重复输出问题求助
问题原因排查
- 数据重复是管道语法误用导致:
%>%会自动将左侧的extracted_data作为bind_rows的第一个输入参数,你又主动传入了一次extracted_data,相当于将两份完全相同的列表合并,自然出现重复数据。 - 原读取代码存在笔误:你定义了路径变量
all_data,但调用excel_sheets时传入了未定义的all_results,实际运行会报错。
解决方案
场景1:宽格式为「每个sheet对应一行,3列分别存储B2、B3、B4的取值」
library(readxl) library(dplyr) library(tidyr) # 修正读取逻辑 wdir <- "你的工作目录路径" all_data <- file.path(wdir, 'data_input.xlsx') tab_names <- excel_sheets(path = all_data) # 批量读取各sheet指定范围 extracted_data <- lapply(tab_names, function(x) { df <- read_excel(all_data, sheet = x, col_names = FALSE, range = "B2:B4") df$sheet_name <- x df$pos <- c("B2_val", "B3_val", "B4_val") return(df) }) %>% bind_rows() # 转宽格式 extracted_data_wide <- extracted_data %>% pivot_wider(names_from = pos, values_from = ...1)
场景2:宽格式为「每个sheet对应一列,3行分别存储B2、B3、B4的取值」
可使用更简洁的写法直接生成结果:
library(readxl) wdir <- "你的工作目录路径" all_data <- file.path(wdir, 'data_input.xlsx') tab_names <- excel_sheets(path = all_data) extracted_data_wide <- sapply(tab_names, function(x) { read_excel(all_data, sheet = x, col_names = FALSE, range = "B2:B4")[[1]] }) %>% as.data.frame()
内容的提问来源于stack exchange,提问作者umrpedrod
相关产品推荐
相关产品推荐

