如何使用gtsummary或gt在表格中插入自定义值
解决方案:向gtsummary表格插入自定义值
你需要将df2中的自定义百分比值插入到合并后的表格的「Adjusted Calculation」列,替换该列的原始统计结果,同时保留「Standard Calculation」列的默认计算值。可以通过gtsummary的modify_table_body函数结合数据匹配来实现,具体代码如下:
library(dplyr) library(gtsummary) set.seed(666) df1 <- data.frame(type=factor(round(runif(n=5000,min=1,max=5.49),digits=0),levels=c(1,2,3,4,5),labels=c("Apollo","Atens","Atiras","Amor","Unknown")), class=factor(round(runif(n=5000,min=1,max=4.49),digits=0),levels=c(1,2,3,4),labels=c("C-type","S-type","M-type","Unknown"))) # 自定义待插入的表格值 df2 <- data.frame(c1=c('type_apollo','type_atens','type_atiras','type_amor','type_unknown','class_c-type','class_s-type','class_m-type','class_unknown'), c2=c('15%','21%','18%','20%','26%','12%','30%','32%','26%')) # 生成两个基础表格 example1.tab <- df1 %>% tbl_summary(label=list(type~"Type",class~"Class")) example2.tab <- df1 %>% tbl_summary(label=list(type~"Type",class~"Class")) # 合并表格并调整表头,同时替换自定义值 ex_all.tab <- tbl_merge(list(example1.tab, example2.tab)) %>% modify_spanning_header(c(stat_0_1, stat_0_2) ~ NA_character_) %>% modify_header(stat_0_1~"Adjusted<br>Calculation",stat_0_2~"Standard<br>Calculation") %>% modify_table_body(function(data) { # 创建匹配ID,和df2的c1格式对齐 data <- data %>% mutate( match_id = case_when( variable == "type" ~ paste0("type_", tolower(label)), variable == "class" ~ paste0("class_", tolower(gsub("-", "", label))), TRUE ~ NA_character_ ) ) # 匹配自定义值并替换目标列 data <- left_join(data, df2, by = c("match_id" = "c1")) %>% mutate(stat_0_1 = ifelse(!is.na(c2), c2, stat_0_1)) %>% select(-match_id, -c2) return(data) }) # 查看最终表格 ex_all.tab
关键步骤说明:
- 生成匹配标识:通过
mutate创建和df2$c1格式一致的match_id,将变量名和类别名统一转换为小写并拼接,确保能和自定义值的键值精准对应。 - 匹配替换目标列:用
left_join关联df2的自定义值到表格数据中,然后替换「Adjusted Calculation」对应的stat_0_1列内容,仅替换存在自定义值的行。 - 清理临时数据:移除用于匹配的临时列,保持表格数据结构整洁。
处理完成后,「Adjusted Calculation」列会显示df2中的自定义百分比,「Standard Calculation」列保留原始统计结果,完全符合你期望的表格样式。
内容的提问来源于stack exchange,提问作者seehorse
相关产品推荐
相关产品推荐

