如何在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
相关产品推荐
相关产品推荐

