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

在R中从多变量列生成含计数与百分比的是/否/未知列并制作flextable

解决flextable双层表头与百分比统计问题

步骤1:数据预处理与统计

先把宽格式数据转成长格式,统一统计每个变量各取值的计数(n)和变量内占比:

library(tidyverse)
library(flextable)

# 模拟你的数据(替换成实际数据即可)
set.seed(123)
df <- tibble(
  var1 = sample(c("Yes", "No", "Unknown"), 100, replace = TRUE),
  var2 = sample(c("Yes", "No", "Unknown"), 100, replace = TRUE),
  var3 = sample(c("Yes", "No", "Unknown"), 100, replace = TRUE),
  var4 = sample(c("Yes", "No", "Unknown"), 100, replace = TRUE),
  var5 = sample(c("Yes", "No", "Unknown"), 100, replace = TRUE)
)

# 统计计数与百分比
summary_df <- df %>%
  # 宽表转长表:所有变量列转为「变量」和「取值」两列
  pivot_longer(cols = everything(), names_to = "变量", values_to = "取值") %>%
  # 按变量+取值分组,统计计数
  group_by(变量, 取值) %>%
  summarize(n = n(), .groups = "drop") %>%
  # 按变量分组,计算每个取值的变量内百分比
  group_by(变量) %>%
  mutate(百分比 = paste0(round(n / sum(n) * 100, 1), "%")) %>%
  ungroup() %>%
  # 转回宽表,让同一取值的n和%相邻
  pivot_wider(
    id_cols = 变量,
    names_from = 取值,
    values_from = c(n, 百分比),
    names_glue = "{取值}_{.value}"
  ) %>%
  # 调整列顺序,确保Yes/No/Unknown的n和%依次排列
  select(变量, Yes_n, Yes_百分比, No_n, No_百分比, Unknown_n, Unknown_百分比)

步骤2:制作带双层表头的flextable

通过add_header_row添加上层表头,再用merge_h合并对应单元格,实现双层结构:

ft <- flextable(summary_df) %>%
  # 设置下层表头为「n」和「%」
  set_header_labels(
    变量 = "变量",
    Yes_n = "n",
    Yes_百分比 = "%",
    No_n = "n",
    No_百分比 = "%",
    Unknown_n = "n",
    Unknown_百分比 = "%"
  ) %>%
  # 添加上层表头:对应Yes/No/Unknown,每个占2列
  add_header_row(
    values = c("变量", "Yes", "Yes", "No", "No", "Unknown", "Unknown"),
    top = TRUE
  ) %>%
  # 合并上层表头的重复单元格
  merge_h(part = "header") %>%
  # 调整样式:居中对齐+booktabs主题
  align(align = "center", part = "all") %>%
  theme_booktabs() %>%
  # 自定义列宽(可根据需求调整)
  width(width = c(1, rep(0.8, 6)))

# 查看结果
ft

关键细节说明

  1. 变量映射:用pivot_longer把多变量列统一转成「变量-取值」的长格式,避免重复写统计逻辑,适配任意数量的变量列。
  2. 百分比计算:按变量分组后计算占比,确保百分比是每个变量内部的比例,而非全局比例。
  3. 双层表头:先设置下层的「n/%」标签,再添加上层的「Yes/No/Unknown」,通过merge_h合并同一取值对应的两个表头单元格,形成双层嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:03:20