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

如何在R中制作类似Excel的行列多表头数据透视表?

生成mtcars数据集的行列多表头数据透视表

原始数据(截取cyl、gear、am列)

cyl gear am
Mazda RX4             6    4  1
Mazda RX4 Wag         6    4  1
Datsun 710            4    4  1
Hornet 4 Drive        6    3  0
Hornet Sportabout     8    3  0
Valiant               6    3  0
Duster 360            8    3  0
Merc 240D             4    4  0
Merc 230              4    4  0
Merc 280              6    4  0
Merc 280C             6    4  0
Merc 450SE            8    3  0
Merc 450SL            8    3  0
Merc 450SLC           8    3  0
Cadillac Fleetwood    8    3  0
Lincoln Continental   8    3  0
Chrysler Imperial     8    3  0
Fiat 128              4    4  1
Honda Civic           4    4  1
Toyota Corolla        4    4  1
Toyota Corona         4    3  0
Dodge Challenger      8    3  0
AMC Javelin           8    3  0
Camaro Z28            8    3  0
Pontiac Firebird      8    3  0
Fiat X1-9             4    4  1
Porsche 914-2         4    5  1
Lotus Europa          4    5  1
Ford Pantera L        8    5  1
Ferrari Dino          6    5  1
Maserati Bora         8    5  1
Volvo 142E            4    4  1

已完成的汇总步骤

已通过以下代码生成按cyl、gear、am分组的计数汇总表:

library(tidyverse)
mtcars %>% 
  summarise(nb = n(), .by = c(cyl, gear, am)) %>% 
  arrange(cyl, gear, am)

输出结果:

cyl gear am nb
1    4    3  0  1
2    4    4  0  2
3    4    4  1  6
4    4    5  1  2
5    6    3  0  2
6    6    4  0  2
7    6    4  1  2
8    6    5  1  1
9    8    3  0 12
10   8    5  1  2

转换为多表头数据透视表

可以使用tidyr::pivot_wider将长格式汇总表转换为行列多表头的宽格式表,其中行维度为cyl,列维度为gear(上层表头)嵌套am(下层表头),值为计数nb:

基础转换代码

# 基于已生成的汇总表转换
summary_df <- mtcars %>% 
  summarise(nb = n(), .by = c(cyl, gear, am)) %>% 
  arrange(cyl, gear, am)

pivot_wider(
  data = summary_df,
  id_cols = cyl,
  names_from = c(gear, am),  # 按gear、am生成多层列名
  values_from = nb,
  values_fill = 0  # 缺失的分组组合填充0
)

输出结果:

# A tibble: 3 × 7
    cyl `3_0` `4_0` `4_1` `5_1` `3_0` `5_1`
  <dbl> <int> <int> <int> <int> <int> <int>
1     4     1     2     6     2     0     0
2     6     2     2     2     1     0     0
3     8    12     0     0     0     0     2

可视化多表头表格(可选)

如果需要生成更美观的带多表头的可视化表格,可以使用gt包:

library(gt)

summary_df %>% 
  pivot_wider(
    id_cols = cyl,
    names_from = c(gear, am),
    values_from = nb,
    values_fill = 0
  ) %>% 
  gt() %>% 
  tab_spanner_delim(delim = "_")  # 按下划线拆分列名,自动生成多层表头

该代码会生成一个带有双层表头的表格,上层为gear的取值(3、4、5),下层为对应am的取值(0、1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:50:40