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

如何修改tbl_hierarchical()生成ECG表中各项的自定义分母?

自定义tbl_hierarchical表格特定分组的分母值

问题背景

使用tbl_hierarchical()生成ECG分析表格时,需要针对特定分组的不同层级设置自定义分母:

  • 分组"A: Drug X"下,BASECAT1为"Normal/missing"的分母设为103
  • 分组"A: Drug X"下,BASECAT1为"Abnormal"的分母设为31

解决方案

tbl_hierarchical的全局denominator参数无法实现这种精细化的分母自定义,需要通过自定义统计函数来指定特定场景的分母值。以下是修改后的完整代码:

adsl <- random.cdisc.data::cadsl
adeg <- random.cdisc.data::cadeg

adeg_f <- adeg %>%
  filter(PARAMCD %in% c("ECGINTP") & ABLFL != "Y") %>%
  filter(ONTRTFL == "Y") %>%
  dplyr::select(USUBJID, PARAMCD, PARAM, BASEC, AVALC, ABLFL, ASEQ, ARM)|>
  dplyr::mutate(
    AVALCAT1 = factor(
      case_when(
        AVALC == "NORMAL" ~ "Normal",
        AVALC == "ABNORMAL" ~ "Abnormal"
      ),
      levels = c("Normal", "Abnormal")  
    ),
    AVALCAT1N = case_when(
      AVALC == "NORMAL" ~ 1,
      AVALC == "ABNORMAL" ~ 2
    )
  ) |>
  dplyr::group_by(USUBJID) |>
  dplyr::slice(which.max(AVALCAT1N)) |>
  dplyr::ungroup() |>
  dplyr::mutate(
    BASECAT1 = factor(
      case_when(
        BASEC == "NORMAL" | BASEC == "" ~ "Normal/missing",
        BASEC == "ABNORMAL" ~ "Abnormal"
      ),
      levels = c("Normal/missing", "Abnormal")
    )
  )

# 定义自定义统计函数,替换特定场景的分母
custom_stat <- function(x, .N, .by, .var, .level) {
  # 获取当前分组和层级信息
  current_arm <- .by$ARM
  current_base_level <- .level$BASECAT1
  
  # 设置自定义分母规则
  custom_N <- case_when(
    current_arm == "A: Drug X" & current_base_level == "Normal/missing" ~ 103,
    current_arm == "A: Drug X" & current_base_level == "Abnormal" ~ 31,
    # 其他情况使用默认分母
    TRUE ~ .N
  )
  
  n <- sum(!is.na(x))
  p <- round(n / custom_N * 100, 1)
  glue::glue("{n}/{custom_N} ({p}%)")
}

tbl <- tbl_hierarchical(
  data = adeg_f,
  by = ARM,
  id = USUBJID,
  variables = c(BASECAT1 , AVALCAT1),
  include = everything(),
  denominator = adeg_f,
  label = list(
    BASECAT1 = "Baseline",
    AVALCAT1 = "Post baseline ECG n/N1 (%)"
  ),
  # 使用自定义统计函数
  statistic = list(everything() ~ custom_stat)
)

tbl

代码说明

  1. 自定义统计函数custom_stat:

    • 通过.by参数获取当前分组(ARM),.level参数获取当前BASECAT1的层级
    • 使用case_when设置自定义分母规则,仅对"A: Drug X"组的指定层级替换分母,其他场景保留原分母
    • 手动计算n(有效例数)、p(百分比),并按格式返回字符串
  2. 表格生成部分:

    • 将statistic参数替换为自定义函数custom_stat,替代原有的字符串格式模板
    • 其余参数保持原有设置,确保表格结构和层级逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:52:37