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

如何在R中创建带条件格式与行列总计的表格并复制指定表格

如何用R实现带条件格式与行列总计的表格

针对你需要复制「数据区域应用条件格式、行列总计部分不应用条件格式」的表格需求,推荐使用gt包来实现——它对表格格式的定制能力极强,能轻松满足你的要求。以下是结合你提供的代码的完整实现步骤:

步骤1:整理数据结构

首先需要把分组统计数据、行总计、列总计整合为适合表格展示的宽格式:

library(tidyverse)
library(gt)

# 原始数据生成代码
dates <- rep(date_vec <- c(as.Date("2022-01-01"), as.Date("2022-02-01"), as.Date("2022-03-01")), 30)
row_groups <- c(rep("row_group1", 20), rep("row_group2", 30), rep("row_group3", 10), rep("row_group4", 30))
col_groups <- c(rep("col_group1", 10), rep("col_group2", 10), rep("col_group3", 30), rep("col_group4", 40))

df <- tibble(dates, row_groups, col_groups)

# 列总计计算
col_group_total <- df %>% 
    group_by(dates, col_groups) %>% 
    count() %>% 
    group_by(col_groups) %>% 
    summarise(mean = mean(n)) %>% 
    mutate(pct = mean/sum(mean))

# 行总计计算
row_group_total <- df %>% 
    group_by(dates, row_groups) %>% 
    count() %>% 
    group_by(row_groups) %>% 
    summarise(mean = mean(n)) %>% 
    mutate(pct = mean/sum(mean)) %>% 
    ungroup()

# 核心表格数据计算
group_total <- df %>% 
    group_by(dates, row_groups, col_groups) %>% 
    count() %>% 
    group_by(row_groups, col_groups) %>% 
    summarise(count = mean(n)) %>% 
    ungroup() %>% 
    mutate(pct = count/sum(count)) %>% 
    ungroup()

# 定义条件格式颜色
red_color <- "#f4cccc"
yellow_color <- "#f3f0ce"
green_color <- "#d9ead3"

# 转换为宽格式,合并行、列总计
table_wide <- group_total %>%
  pivot_wider(names_from = col_groups, values_from = pct) %>%
  # 添加行总计列
  left_join(row_group_total %>% select(row_groups, pct), by = "row_groups") %>%
  rename(`行总计` = pct) %>%
  # 添加列总计行
  add_row(
    row_groups = "列总计",
    col_group1 = col_group_total$pct[col_group_total$col_groups == "col_group1"],
    col_group2 = col_group_total$pct[col_group_total$col_groups == "col_group2"],
    col_group3 = col_group_total$pct[col_group_total$col_groups == "col_group3"],
    col_group4 = col_group_total$pct[col_group_total$col_groups == "col_group4"],
    `行总计` = sum(row_group_total$pct)
  )

步骤2:用gt构建带条件格式的表格

接下来使用gt包创建表格,精准控制条件格式的应用范围:

gt_table <- table_wide %>%
  gt(rowname_col = "row_groups") %>%
  # 仅对非总计行、非总计列的数据应用条件格式
  data_color(
    columns = c(col_group1, col_group2, col_group3, col_group4),
    rows = row_groups != "列总计",
    colors = scales::col_numeric(
      palette = c(red_color, yellow_color, green_color),
      domain = range(table_wide %>% filter(row_groups != "列总计") %>% select(-row_groups, -`行总计`))
    )
  ) %>%
  # 将所有数值格式化为百分比
  fmt_percent(columns = everything(), decimals = 1) %>%
  # 设置表格标题
  tab_header(title = "分组统计表格(带条件格式与总计)") %>%
  # 高亮总计行和总计列,增强区分度
  tab_style(
    style = cell_fill(color = "#e6e6e6"),
    locations = list(
      cells_rows(row_groups == "列总计"),
      cells_columns(columns = `行总计`)
    )
  ) %>%
  # 给行名称添加加粗样式
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_row_groups()
  )

# 输出表格
gt_table

关键细节说明

  • 条件格式范围控制:通过rows = row_groups != "列总计"和指定数据列,确保只有核心数据区域应用颜色渐变,行列总计完全不受影响。
  • 总计区分:用浅灰色背景高亮总计行和列,让表格结构更清晰。
  • 格式统一:fmt_percent将所有数值转为百分比显示,提升表格可读性。

如果需要导出表格为HTML或PDF文件,可使用gtsave(gt_table, "统计表格.html")或gtsave(gt_table, "统计表格.pdf")命令完成导出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:35:29