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

基于Rmarkdown/Quarto的试验事件统计表格生成问题

解决思路:dplyr整理统计数据 + gt生成报告表格

先模拟你的重复ID事件数据集(替换成你的真实数据即可):

library(dplyr)
library(gt)

# 最小示例数据集
event_data <- tibble(
  ID = c(1,1,2,3,3,3,4,5),
  type = c("A","B","A","A","B","C","B","A")
)

1. 计算统计指标(整体+分类)

核心是先获取总唯一人员数,再分别统计整体和各类型的事件数、涉事唯一ID数,最后计算占比:

# 先获取总唯一人员数(用于计算占比)
total_unique_ids <- event_data %>% distinct(ID) %>% nrow()

# 整体事件统计
overall <- tibble(
  事件类型 = "整体",
  事件总数 = nrow(event_data),
  涉事人员数 = total_unique_ids,
  人员占比 = paste0(round(total_unique_ids / total_unique_ids * 100, 1), "%")
)

# 按type分类统计
type_stats <- event_data %>%
  group_by(type) %>%
  summarize(
    事件总数 = n(),
    涉事人员数 = n_distinct(ID), # 统计唯一涉事ID,避免重复计数
    .groups = "drop"
  ) %>%
  mutate(
    事件类型 = type,
    人员占比 = paste0(round(涉事人员数 / total_unique_ids * 100, 1), "%")
  ) %>%
  select(-type)

# 合并整体与分类数据
summary_table_data <- bind_rows(overall, type_stats)

2. 生成适合报告的表格

用gt包把统计数据转换成专业表格,可直接在Rmarkdown/Quarto中渲染:

summary_table_data %>%
  gt() %>%
  tab_header(title = "事件统计汇总") %>%
  cols_label(
    事件类型 = "事件类型",
    事件总数 = "事件发生总数",
    涉事人员数 = "涉及人员数量",
    人员占比 = "人员占比"
  ) %>%
  fmt_number(columns = c(事件总数, 涉事人员数), decimals = 0) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = 事件类型 == "整体")
  )

关键说明

  • n_distinct(ID)专门统计唯一涉事人员,解决同一ID多条事件记录的重复计数问题
  • 单独计算整体统计后合并,确保表格包含你需要的"整体"汇总行
  • gt包支持自定义样式(比如添加边框、调整配色等),完全适配研究报告的排版需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:50:13