在R语言中将长格式数据框转换为带嵌套列头的宽格式
实现嵌套列头的表格转换方法
要生成你需要的嵌套列头格式,仅靠pivot_wider只能得到带复合列名的宽表,想要可视化出多层表头,需要结合表格渲染工具(比如kableExtra)来实现。以下是完整步骤:
1. 加载所需包
library(tidyverse) library(kableExtra)
2. 数据格式转换
先把原数据中的Data1、Data2转为行维度(即作为表格的行名),再通过pivot_wider将Year和Sex转为列维度:
df_processed <- df %>% # 将Data1/Data2转成长格式的行指标 pivot_longer(cols = starts_with("Data"), names_to = "Metric", values_to = "Value") %>% # 按Year和Sex展开为宽表,列名自动生成为Year_Sex格式 pivot_wider(names_from = c(Year, Sex), values_from = Value)
3. 生成嵌套表头表格
用kableExtra的add_header_above来创建两层表头,对应年份和性别层级:
df_processed %>% kbl(col.names = c("", "F", "M", "X", "F", "M", "X", "F", "M", "X")) %>% # 第一层表头:年份,每个年份对应3列(F/M/X) add_header_above(c(" " = 1, "2018" = 3, "2019" = 3, "2020" = 3)) %>% # 调整表格样式,避免过宽 kable_styling(full_width = FALSE)
运行后会生成你需要的嵌套表头表格:
| 2018 | 2019 | 2020 | |
|---|---|---|---|
| F | M | X | |
| Data1 | 1 | 4 | 5 |
| Data2 | 14 | 34 | 588 |
注:你示例中2020年X对应的46应为原数据的456,上述结果保留原始数据值。
内容的提问来源于stack exchange,提问作者Gilthoniel
相关产品推荐
相关产品推荐

