如何为flextable添加含缺失值的百分比列(基于列表对象)
解决方案
要给列表中每个表格添加包含缺失值的百分比列,可按以下步骤修改代码:
完整代码
library(tidyverse) library(officer) library(flextable) library(scales) # 用于百分比格式化 doc <- read_docx() for(i in 1:length(table_list)){ # 处理数据:补全因子水平、计算百分比 processed_df <- table_list[[i]] %>% complete(Var1 = levels(Var1)) %>% # 补全所有Var1的因子水平(N/Y),缺失行的Freq设为NA mutate( Percent = Freq / sum(Freq, na.rm = TRUE), # 计算百分比,求和时忽略NA Percent = percent(Percent, na.rm = FALSE) # 转为百分比格式,保留NA ) # 生成flextable并设置格式 tbl <- processed_df %>% flextable() %>% set_table_properties(width = 0.5) %>% set_caption(names(table_list)[[i]]) %>% align(j = "Percent", align = "right") %>% # 百分比列右对齐 set_header_labels(Var1 = "分组", Freq = "频数", Percent = "百分比") # 自定义列名(可选) doc <- doc %>% body_add_flextable(tbl) } print(doc, target = "report.docx")
关键步骤说明
- 补全因子水平:使用
complete()函数确保每个表格都包含Var1的所有因子水平(N和Y),缺失的行自动填充NA,满足“包含缺失值”的要求。 - 百分比计算:用每行的
Freq除以该表格的总频数(sum(Freq, na.rm = TRUE)忽略NA值),再通过scales::percent()转为易读的百分比格式,保留NA显示。 - 表格格式优化:添加了百分比列右对齐、自定义列名的操作,让表格更美观(可根据需求调整)。
内容的提问来源于stack exchange,提问作者stephr
相关产品推荐
相关产品推荐

