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

如何仅将svyCreateTableOne生成表格的频数四舍五入为整数?

解决tableone加权分层表格仅取整频数、保留百分比小数的问题

问题背景

使用tableone和survey包创建加权分层TableOne表格时,需要实现:

  • 分组样本量n及分类变量的频数freq四舍五入为整数
  • 百分比保留小数位数
    但print()的catDigits参数会同时对百分比取整,不符合需求;自行修改tab1$CatTable中的freq和n列后,得到的是22.0这类带小数位的数值,无法直接导出。

解决方案

核心是将取整后的数值转换为整数类型(而非保留数值型的整数形式),同时单独处理分层样本量n,最后通过print()参数控制百分比小数位。

完整代码流程

  1. 数据构建与表格初始化(沿用原代码)
library(tableone)
library(survey)

set.seed(123)
data <- data.frame(
  married = sample(c(1, 0), 100, replace = TRUE),
  nodegree = sample(c(1, 0), 100, replace = TRUE),
  age = rnorm(100, mean = 50, sd = 10),
  treat = rbinom(100, size = 1, prob = 0.3),
  weight = 0  # 初始化权重变量
)
data$weight[data$treat == 1] <- runif(sum(data$treat == 1), min = 0.03, max = 0.87)
data$weight[data$treat == 0] <- runif(sum(data$treat == 0), min = 0.03, max = 0.87)

datasvy <- survey::svydesign(~1, data = data,
                             strata = ~treat,
                             weights = ~weight)

tab1 <- svyCreateTableOne(vars = c("married", "nodegree"),
                          strata = "treat",
                          data = datasvy,
                          factorVars = c("married", "nodegree"))
  1. 修改表格中的频数与样本量
# 定义需要处理的分类变量
vars <- c("married", "nodegree")

# 遍历修改分类变量的freq和n,取整后转为整数类型
for (i in seq_along(tab1$CatTable)) {
  for (var in vars) {
    tab1$CatTable[[i]][[var]]$freq <- as.integer(round(tab1$CatTable[[i]][[var]]$freq))
    tab1$CatTable[[i]][[var]]$n <- as.integer(round(tab1$CatTable[[i]][[var]]$n))
  }
}

# 修改分层样本量n,取整后转为整数类型
tab1$n <- as.integer(round(tab1$n))
  1. 打印并导出表格
# catDigits设置为1,保留百分比1位小数
print(tab1, catDigits = 1)

预期输出

Stratified by treat
                   0            1            p      test
  n                36           11                    
  married = 1 (%)  22 (60.3)    6 (51.0)   0.469     
  nodegree = 1 (%) 17 (46.7)    5 (45.6)   0.934 

关键说明

  • round()函数返回的是数值型(numeric),即使结果为整数也会显示为x.0;通过as.integer()转换为整数类型后,即可去掉小数后缀。
  • tab1$n存储的是分层样本量,需要单独修改才能替换表格顶部的n取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:37:07