如何使用dplyr在R中读取含两行表头的Excel文件并合并表头
R 中使用 dplyr 处理双行表头 Excel 数据方法
核心处理逻辑:读取时跳过自动表头识别,单独提取前两行表头内容拼接为正式列名,再清洗后续数值数据即可。
- 加载依赖包
处理需要用到readxl读取Excel文件、dplyr做数据清洗,二者同属tidyverse生态,适配性好:library(dplyr) library(readxl) - 原始数据全量读取
读取时设置col_names = FALSE,不将首行识别为表头,避免丢失第二行的单位信息:
读入的# 替换为你自己的Excel文件路径,sheet参数可指定对应工作表序号/名称 raw_data <- read_excel("your_file_path.xlsx", col_names = FALSE)raw_data结构如下:前两行为表头内容(第一行是指标名、第二行是单位),第三行及以后为实际观测值。 - 拼接生成单行表头
提取前两行内容,按列拼接为“指标名 (单位)”格式的列名:
生成的final_colnames <- raw_data %>% slice(1, 2) %>% # 选取前两行表头 # 逐列拼接两行内容,中间用空格分隔,trimws用于去除首尾多余空格 summarise(across(everything(), ~paste(trimws(.x[1]), trimws(.x[2])))) %>% unlist(use.names = FALSE)final_colnames即为目标列名:c("Gram (g)", "Nanogram (ng)") - 清洗得到最终数据集
剔除前两行表头内容,替换列名,同时将文本格式的数值转为数值类型:clean_data <- raw_data %>% slice(-1, -2) %>% # 删除前两行表头行 setNames(final_colnames) %>% # 替换为拼接好的列名 mutate(across(everything(), as.numeric)) # 统一转为数值类型
处理完成后clean_data的输出完全符合预期格式:
# A tibble: 2 × 2 `Gram (g)` `Nanogram (ng)` <dbl> <dbl> 1 1 2 2 1 4
如果你的表头行数、拼接规则有调整,只需要修改slice选取的行号、paste里的拼接格式即可适配。
内容的提问来源于stack exchange,提问作者wander Hi
相关产品推荐
相关产品推荐

