如何在datasummary中添加列数与原表不一致的跨列行?
解决datasummary添加跨列行的列数不匹配问题
向datasummary生成的表格添加行时,若新增行的列数少于原表格,会触发如下错误:
Error in factory(dse, align = align, fmt = fmt, hrule = NULL, notes = notes, :
Assertion on 'add_rows' failed: Must have exactly 5 cols, but has 2 cols.
可正常运行的代码示例
library(modelsummary) set.seed(123) # 保证结果可复现 data <- data.frame( x1 = rnorm(100), x2 = rnorm(100), y = rnorm(100) ) summary_table <- datasummary( x1 + x2 + y ~ Mean + SD + Min + Max, data = data ) new_row <- data.frame( First_variable = "New Row", Mean = 1, SD = 2, Min = 3, Max = 4 ) datasummary( x1 + x2 + y ~ Mean + SD + Min + Max, data = data, add_rows = new_row )
无法运行的代码示例
new_row2 <- data.frame( First_variable = "New Row", Mean = "a bit of a longer text" ) datasummary( x1 + x2 + y ~ Mean + SD + Min + Max, data = data, add_rows = new_row2 )
解决方法
要实现跨多列的行,需保证新增行的列数与原表格完全一致,空缺列用NA占位,再通过span参数指定跨列范围:
library(modelsummary) set.seed(123) data <- data.frame( x1 = rnorm(100), x2 = rnorm(100), y = rnorm(100) ) # 构造列数匹配的新增行,空缺列填充NA new_row_span <- data.frame( First_variable = "跨列说明文本", Mean = NA, SD = NA, Min = NA, Max = NA ) # 使用span参数指定第2到第5列合并(对应Mean至Max列) datasummary( x1 + x2 + y ~ Mean + SD + Min + Max, data = data, add_rows = new_row_span, span = list(c(2, 5)) )
如果需要调整跨列位置,只需修改span中的列索引范围即可。若想隐藏NA的显示,可搭配fmt参数将NA格式化为空字符串:
datasummary( x1 + x2 + y ~ Mean + SD + Min + Max, data = data, add_rows = new_row_span, span = list(c(2, 5)), fmt = function(x) ifelse(is.na(x), "", x) )
内容的提问来源于stack exchange,提问作者Karl A
相关产品推荐
相关产品推荐

