使用不同数据集计算分母时rbind报错的解决方案求助
解决rtables中不同分母表格合并报错的问题
问题背景
需要创建一个包含两部分的表格,两部分统计量使用不同分母,因此分开构建tbl_recipe1和tbl_recipe2。但由于两个表格的列头计数(N_col)不一致,使用rbind合并时出现报错。
解决方案核心
rtables的rbind要求合并的表格列结构完全一致,包括列头的计数信息。因此需要让两个表格的列头计数保持统一,同时通过count_occurrences的id参数控制统计量的分母,实现不同部分用不同分母统计的需求。
修改后的完整代码
library(random.cdisc.data) library(dplyr) library(rtables) library(haven) library(purrr) library(stringr) library(tern) library(forcats) library(formatters) adsl_cdisc1 <- random.cdisc.data::cadsl adex_cdisc1 <- random.cdisc.data::cadex adsl_cdisc2 <- dplyr::filter(adsl_cdisc1, SAFFL == "Y") |> dplyr::select(USUBJID, TRT01A) |> dplyr::mutate( TRT01A = forcats::fct_inorder(TRT01A) ) adex_cdisc2 <- dplyr::select( adex_cdisc1, USUBJID, SAFFL, STRATA1, AVISIT) |> dplyr::left_join(adsl_cdisc2, by = "USUBJID") |> dplyr::mutate( EXP = dplyr::case_when( !is.na(AVISIT) ~ "Number of exposed participants", TRUE ~ NA_character_ ), STRA = dplyr::case_when( STRATA1 == "B" ~ "Number of records with STRATA1 = B by visit", TRUE ~ NA_character_ ), SORT = paste(USUBJID, AVISIT) ) |> dplyr::filter(SAFFL == "Y", !is.na(AVISIT)) adex_cdisc3 <- dplyr::filter(adex_cdisc1, SAFFL == "Y") |> dplyr::select(USUBJID, AVISIT) |> dplyr::right_join(adsl_cdisc2, by = "USUBJID") |> dplyr::mutate( SORT = paste(USUBJID, AVISIT) ) |> distinct(SORT, TRT01A) # 第一部分表格:分母为受试者数(USUBJID) tbl_recipe1 <- basic_table() |> add_colcounts() |> split_cols_by("TRT01A") |> count_occurrences("EXP", id = "USUBJID", .stats = "count_fraction" ) |> rtables::build_table(adex_cdisc2, alt_counts_df = adsl_cdisc2) # 第二部分表格:分母为记录数(SORT),但列头计数与第一部分统一为受试者数 tbl_recipe2 <- basic_table() |> add_colcounts() |> split_cols_by("TRT01A") |> count_occurrences("STRA", id = "SORT", .stats = "count_fraction" ) |> rtables::build_table(adex_cdisc2, alt_counts_df = adsl_cdisc2) # 改用adsl_cdisc2统一列头计数 # 合并表格 tbl <- rbind( tbl_recipe1, rtables::rrow(""), # 添加空行分隔两部分 tbl_recipe2 ) # 查看结果 tbl
关键说明
- 统一列头计数:两个表格的
build_table都使用alt_counts_df = adsl_cdisc2,确保列头显示的总受试者数一致,让表格结构匹配。 - 控制统计分母:
tbl_recipe1的id = "USUBJID":统计时以受试者为单位,分母是每组的总受试者数。tbl_recipe2的id = "SORT":统计时以记录(USUBJID+AVISIT组合)为单位,分母是每组的总记录数,实现不同分母的统计需求。
- 合并验证:修改后两个表格的列结构完全一致,
rbind可以正常执行,生成包含两部分的完整表格。
内容的提问来源于stack exchange,提问作者Lanlan Peng
相关产品推荐
相关产品推荐

