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

如何在R语言数据透视表中添加类似Excel的子分类

在R中实现带子分类的类Excel数据透视表效果

需求说明

现有代码已实现按segment分组汇总数值并添加整体总计,但需要在segment列下添加position作为子分类,实现类似Excel数据透视表的层级展示效果。

用户提供的原始数据与现有代码

原始数据生成代码

df <- data.frame(segment=rep(c('A1', 'B2', 'C3', 'D4'), each=4),
                 position=rep(c('G', 'F'), times=8),
                 values=round(runif(16, 4, 20),0))

现有汇总代码(仅按segment汇总+总计)

dfa=df%>%
  group_by(segment)%>%
  summarise(total_values=sum(values))%>%{ x <- . 
  bind_rows(
    x,
    summarise(
      x ,
      across(where(is.numeric), ~ sum(.x, na.rm = TRUE)),
      across(where(is.character), ~"TOTAL")
    )
  )}

实现子分类的解决方案代码

library(dplyr)

# 1. 计算每个segment下各position的子分类合计
sub_category <- df %>%
  group_by(segment, position) %>%
  summarise(total_values = sum(values), .groups = "drop")

# 2. 计算每个segment的小计
segment_summary <- df %>%
  group_by(segment) %>%
  summarise(position = "小计", total_values = sum(values), .groups = "drop")

# 3. 计算整体总计
overall_summary <- df %>%
  summarise(segment = "TOTAL", position = "总计", total_values = sum(values))

# 4. 合并结果并处理层级显示(重复segment名称置空)
final_result <- bind_rows(sub_category, segment_summary, overall_summary) %>%
  arrange(segment, position) %>%
  mutate(segment = ifelse(duplicated(segment), "", segment))

# 查看结果
print(final_result)

代码说明

  • 拆分计算子分类合计、分组小计、整体总计三个部分,确保各层级数据准确
  • 合并后通过duplicated()函数将重复的segment名称置空,模拟Excel数据透视表中父分类仅显示一次、子分类缩进的视觉效果
  • 结果按segment和position排序,层级结构清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:05:18