You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中创建示例所示的多级透视表?

在R语言中创建多级列透视表的方法

针对你提供的数据集,要生成带有两级列标题(一级为Cat2的X/Y,二级为Metric1/Metric2)的透视表,这里提供两种实用方法:

方法一:使用reshape2包(经典数据重塑工具)

通过先转长格式再转宽格式,快速生成目标结构:

# 加载包
library(reshape2)

# 1. 将原宽格式数据转为长格式,合并Metric1/Metric2列
melted_df <- melt(df, id.vars = c("Cat1", "Cat2"), variable.name = "Metric")

# 2. 重塑为多级列的宽格式表
result <- dcast(melted_df, Cat1 ~ Cat2 + Metric)

运行后得到的result数据框结构如下:

> result
  Cat1 X_Metric1 X_Metric2 Y_Metric1 Y_Metric2
1    A         1         4        10        40
2    B         2         5        20        50
3    C         3        30         6        60

方法二:使用tidyverse工具链(tidy风格语法)

如果习惯使用tidyverse的语法,可以通过pivot_longer和pivot_wider组合实现:

# 加载包
library(tidyverse)

result <- df %>%
  # 先将Metric列转为长格式
  pivot_longer(cols = starts_with("Metric"), names_to = "Metric", values_to = "Value") %>%
  # 再重塑为多级列的宽格式
  pivot_wider(
    id_cols = Cat1,
    names_from = c(Cat2, Metric),
    values_from = Value
  )

渲染为带多级表头的可视化表格

如果需要将数据框展示为你提供的那种带跨列表头的样式,可以使用gt包来设置:

library(gt)

gt(result) %>%
  # 设置第一级跨列标题
  tab_spanner(label = "X", columns = starts_with("X_")) %>%
  tab_spanner(label = "Y", columns = starts_with("Y_")) %>%
  # 设置第二级列标题
  cols_label(
    X_Metric1 = "Metric1",
    X_Metric2 = "Metric2",
    Y_Metric1 = "Metric1",
    Y_Metric2 = "Metric2"
  ) %>%
  # 将Cat1列移到最前面
  cols_move_to_start(Cat1)

这样就能生成完全符合你需求的多级透视表样式。

内容的提问来源于stack exchange,提问作者mmarton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:55:10