You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Excel、R或Tableau中实现多级表头表格逆透视?

没问题!我来帮你把这个带多级表头的宽表转成你想要的长格式,下面分别说说Excel、R、Tableau的具体操作方法:

Excel 操作方法
  • 先整理表头:你的原始表有两行表头(第一行是月份,第二行是状态),先在第三行生成合并后的列名,比如在A3单元格输入=A1&"_"&A2,然后拖动填充到所有列,这样每列的名字就变成November_On-timeNovember_Not这种格式。
  • 选中第三行到所有数据行(包括Firm列),点击「数据」选项卡的「从表格/区域」,把数据导入Power Query编辑器。
  • 在Power Query里,选中Firm列,然后点击「转换」选项卡的「逆透视其他列」,这时候会生成AttributeValue两列。
  • 选中Attribute列,点击「转换」→「拆分列」→「按分隔符」,选择下划线_作为分隔符,分成两列,分别命名为Monthstatus
  • 最后把Value列重命名为pct,调整列的顺序,关闭并上载到Excel,就得到你要的长格式表了。
R 操作方法

用tidyverse工具包的tidyr就能轻松搞定,步骤如下:

  • 首先加载tidyverse:
    library(tidyverse)
    
  • 读入你的数据(假设数据保存为csv文件,或者已经在R里生成了数据框df),注意处理两行表头:
    # 读入时指定表头为前两行,然后合并列名
    df <- read.csv("your_data.csv", header = FALSE)
    colnames(df) <- paste(df[1, ], df[2, ], sep = "_")
    # 去掉前两行表头数据,保留实际内容
    df <- df[-c(1, 2), ]
    
  • pivot_longer转成长格式:
    df_long <- df %>%
      pivot_longer(
        cols = -Firm,  # 除了Firm列,其他列都要逆透视
        names_to = c("Month", "status"),  # 拆分后的列名
        names_sep = "_",  # 按下划线拆分原列名
        values_to = "pct"  # 数值列的名字
      ) %>%
      # 可选:把status改成小写,和你示例里的on-time一致
      mutate(status = tolower(status))
    
  • 运行后df_long就是你要的长格式数据了。
Tableau 操作方法
  • 把数据导入Tableau后,在数据源界面,选中前两行表头,右键选择「合并字段」,这样每列的字段名会变成November - On-timeNovember - Not这种格式。
  • 选中所有合并后的字段(除了Firm),右键选择「数据透视」,这时候会生成「透视字段名称」和「透视字段值」两个字段。
  • 右键「透视字段名称」,选择「拆分」,Tableau会自动按分隔符(这里是破折号)拆分成透视字段名称1透视字段名称2,把它们分别重命名为Monthstatus
  • 把「透视字段值」重命名为pct,然后把字段拖到视图里调整顺序,就得到长格式的结果了。

内容的提问来源于stack exchange,提问作者Christian R. Houen

火山引擎 最新活动