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

如何用rtables实现同ARM行内以Group1为分母计算Group2占比

解决rtables中Group2占比以同ARM同组Group1为分母的问题

要实现Group2占比以同ARM-国家-站点分组下的Group1数值为分母的需求,核心是提前获取分组分母并在rtables的统计逻辑中手动调用,而非依赖默认的自身分母计算。以下是具体实现步骤:

1. 预处理数据,提取分组分母

先用dplyr筛选出每个ARM-国家-站点分组下Group1的计数,作为后续计算的分母,再关联回原数据:

library(dplyr)
library(rtables)

# 假设原始数据框为df,包含字段:ARM, Country, Site, Group, Count
# 提取各分组的Group1计数作为分母
denominator_df <- df %>%
  filter(Group == "Group1") %>%
  group_by(ARM, Country, Site) %>%
  summarise(Group1_Count = first(Count), .groups = "drop")

# 将分母关联到原数据的所有行
df_joined <- df %>%
  left_join(denominator_df, by = c("ARM", "Country", "Site"))

2. 自定义rtables统计函数

rtables默认的占比计算逻辑无法直接引用外部分母,因此需要自定义统计函数,从关联后的数据中获取Group1分母计算占比:

# 自定义函数:返回计数+占比(占比=当前Group计数/同分组Group1计数)
calc_group_pct <- function(x, .df_row) {
  current_count <- sum(x)
  # 从当前分组数据中提取Group1的计数
  group1_denom <- .df_row$Group1_Count %>% unique() %>% first()
  
  # 避免除以0的情况
  pct <- if (group1_denom == 0) 0 else (current_count / group1_denom) * 100
  
  # 格式化输出,比如"12 (30.0%)"
  paste0(current_count, " (", sprintf("%.1f%%", pct), ")")
}

3. 构建并生成表格

在构建表格布局时,通过analyze调用自定义函数,利用.df_row参数获取当前分组的完整数据,从而拿到Group1分母:

# 构建表格布局
table_layout <- basic_table() %>%
  split_cols_by("ARM") %>%
  split_rows_by("Country") %>%
  split_rows_by("Site") %>%
  split_cols_by("Group") %>%
  analyze(
    var = "Count",
    func = calc_group_pct,
    extra_args = list(.df_row = .df_row)
  )

# 生成最终表格
final_table <- build_table(table_layout, df_joined)
print(final_table)

关键逻辑说明

  • 预处理阶段的left_join确保每个Group2的行都能获取到同分组下Group1的计数,为后续计算提供数据基础。
  • 自定义统计函数中,.df_row是rtables提供的参数,代表当前分组的所有行数据,通过它可以直接提取Group1的分母值。
  • 加入了除以0的判断,避免出现计算错误。

运行上述代码后,Group2的占比将以同ARM-国家-站点的Group1数值为分母计算,完全符合你的期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:00:04