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

使用datasummary实现因子N与占比同列展示并整合定量变量统计

解决datasummary分组展示因子计数百分比与定量变量均值标准差的整合问题

一、修复计数(N)与百分比合并函数

你之前的NP函数存在语法和逻辑错误,修正后的版本可以正确实现计数与百分比的同列展示:

NP <- function(x) {
  # 计算非缺失值的样本量
  n <- sum(!is.na(x))
  # 计算分组内的百分比(基于当前分组的总样本量)
  p <- 100 * n / length(x)
  # 拼接成「计数 (百分比%)」格式,保留2位小数
  paste0(n, " (", round(p, 2), "%)")
}

二、生成因子变量统计表格

使用修正后的NP函数,直接在datasummary中调用即可得到同列展示的计数与百分比:

tbl_1 <- datasummary(
  (Heading("")*NP)*(Gender + Job) ~ Species,
  data = iris_tab1,
  fmt = 2,
  output = 'data.frame'
)

三、为定量变量表格补全空列并合并

要让定量变量表格与因子表格结构对齐,只需在生成后手动添加对应空列,再合并两个表格:

# 生成定量变量的均值标准差表格
tbl_2 <- datasummary(
  Heading("")*MeanSD*Length ~ Species,
  data = iris_tab1,
  output = 'data.frame'
)

# 添加空行标题列,与tbl_1结构对齐
tbl_2 <- tibble(
  ` ` = "Length",  # 行标题设为Length
  tbl_2
)

# 合并两个表格
final_tbl <- rbind(tbl_1, tbl_2)

完整可运行代码

library(modelsummary)
library(magrittr)
library(dplyr)

set.seed(123)
iris$gender <- factor(sample(1:3, size = 150, replace = T), 
                      labels = c("Male", "Female", "Other"))
iris$job <-  factor(sample(1:5, size = 150, replace = T), 
                    labels = c("Student", "Worker", "CEO", "Other", "None"))

# 均值标准差合并函数
MeanSD <- function(x) {
  M <- mean(x, na.rm = T)
  SD <- sd(x, na.rm = T)
  paste0(round(M, 2), " (", round(SD, 2), ")")
}

# 修复后的计数百分比合并函数
NP <- function(x) {
  n <- sum(!is.na(x))
  p <- 100 * n / length(x)
  paste0(n, " (", round(p, 2), "%)")
}

# 整理数据
iris_tab1 <- iris %>% 
  dplyr::select(Species,
                Gender = gender,
                Job = job,
                Length = Sepal.Length)

# 生成因子变量统计表格
tbl_1 <- datasummary(
  (Heading("")*NP)*(Gender + Job) ~ Species,
  data = iris_tab1,
  fmt = 2,
  output = 'data.frame'
)

# 生成定量变量统计表格并补全结构
tbl_2 <- datasummary(
  Heading("")*MeanSD*Length ~ Species,
  data = iris_tab1,
  output = 'data.frame'
) %>% 
  mutate(` ` = "Length", .before = 1)

# 合并最终表格
final_tbl <- rbind(tbl_1, tbl_2)

# 查看结果
final_tbl

结果说明

最终的final_tbl会按Species分组展示:

  • Gender、Job各水平的计数与百分比(同列)
  • Length的均值与标准差(同列)
  • 所有统计结果整合为一个结构整齐的表格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:48:09