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

宽格式数据框按组统计分类数据频率及可视化需求

患者数据分组统计与比例对比实现方案

问题分析

你之前的代码错误在于连续两次group_by会覆盖前一次分组,导致无法同时按组和变量统计,且未区分Yes/No状态的计数。以下是完整实现步骤:

1. 加载依赖包与数据准备

library(tidyverse)

# 生成可复现的模拟数据集
set.seed(123)
group <- sample(c("group 1", "group 2"), 100, replace = TRUE)
gender <-  sample(c("Male", "Female"), 100, replace = TRUE)
medication_1 <- sample(c("Yes", "No"), 100, replace=TRUE)
medication_2 <- sample(c("Yes", "No"), 100, replace=TRUE)
comorbidity_1 <-sample(c("Yes", "No"), 100, replace=TRUE)
comorbidity_2 <-sample(c("Yes", "No"), 100, replace=TRUE)

df <- data.frame(group, gender, medication_1, medication_2, comorbidity_1, comorbidity_2)

2. 宽转长与统计计数/比例

用tidyr::pivot_longer替代reshape::melt,适配tidyverse工作流,同时完成正确的分组统计:

# 将宽格式数据转为长格式
df_long <- df %>%
  pivot_longer(cols = -group, names_to = "variable", values_to = "status")

# 统计分组-变量-状态的计数,再计算组内比例
summary_df <- df_long %>%
  group_by(group, variable, status) %>%
  summarise(count = n(), .groups = "drop") %>%
  group_by(group, variable) %>%
  mutate(prop = count / sum(count)) %>%
  ungroup()

3. 生成按组拆分的计数表格

将统计结果转为宽格式,得到直观的分组计数对比表:

count_table <- summary_df %>%
  select(-prop) %>%
  pivot_wider(names_from = c(group, status), values_from = count, values_fill = 0)

# 查看最终计数表格
print(count_table)

4. 绘制组间比例对比图

参考目标风格,绘制分组条形图展示各变量的Yes占比:

# 筛选出Yes状态的比例数据
yes_prop_df <- summary_df %>%
  filter(status == "Yes")

# 生成比例对比图
ggplot(yes_prop_df, aes(x = variable, y = prop, fill = group)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  # 添加百分比标签
  geom_text(aes(label = scales::percent(prop, accuracy = 1)),
            position = position_dodge(width = 0.8), vjust = -0.3, size = 3.5) +
  # 设置y轴为百分比格式
  scale_y_continuous(labels = scales::percent_format(), limits = c(0, 1)) +
  # 设置图表标题与标签
  labs(title = "用药与合并症组间比例对比",
       x = "变量类型",
       y = "占比",
       fill = "患者分组") +
  # 优化主题样式
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.title = element_text(hjust = 0.5))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:15:45