如何在modelsummary中重命名新增列并自定义多列添加顺序?
解决modelsummary添加自定义列的命名与位置问题
1. 直接为新增列命名
不用外部重命名数据框,在add_columns里创建data.frame时直接指定列名就能避免默认名称:
add_col <- data.frame(自定义列名 = c("x","","x","","",""))
2. 添加多个名称相同的列
由于data.frame不允许重复列名,先给新增列设置临时唯一名称,再用modify_table_header修改表头显示为相同名称即可。
3. 自定义列的插入位置
利用add_columns的position参数,支持用列名(比如模型列的名称HP)指定插入位置(after 列名或before 列名);如果要添加多个列到不同位置,传入list格式的新增列,同时给position传对应长度的位置向量。
完整代码示例
library(fixest) library(modelsummary) # 拟合回归模型 reg1 <- feols(hp ~ vs + am + qsec | carb, data = mtcars) reg2 <- feols(wt ~ vs + am + qsec | carb, data = mtcars) reg3 <- feols(gear ~ vs + am + qsec | carb, data = mtcars) # 准备两个新增列,用临时唯一列名 new_col1 <- data.frame(temp_col1 = c("x", "", "x", "", "", "")) new_col2 <- data.frame(temp_col2 = c("", "y", "", "y", "", "")) # 生成表格并添加列,指定插入位置,最后修改表头为相同名称 tab <- modelsummary( list("HP" = reg1, "WT" = reg2, "GEAR" = reg3), stars = TRUE, statistic = c("s.e. = {std.error}"), estimate = "estimate", fmt = fmt_statistic(p.value = fmt_sprintf("%.2e")), # 传入list格式的新增列,对应每个列的插入位置 add_columns = list(new_col1, new_col2), position = c("after HP", "after WT") ) %>% # 修改表头,把临时列名改成想要的相同名称 modify_table_header( temp_col1 = "自定义列", temp_col2 = "自定义列" ) # 查看结果 tab
关键说明
position参数支持"after 列名"这种语义化写法,比整数位置更直观不易出错- 如果要插入多列到同一位置,直接在data.frame中添加多列,指定一个position即可
modify_table_header可以灵活修改任意表头的显示名称,完全覆盖原始列名
内容的提问来源于stack exchange,提问作者flâneur
相关产品推荐
相关产品推荐

