Flextable:使 signif stars 加粗并删除 stars 和系数之间的 space

Flextable: make the signif stars bold and remove the space between stars and the coefficient

我正在测试 flextable,这是 David Gohel 的 R 包,用于发布工作流,我想知道如何格式化回归表单元格中的子字符串。特别是,我的目标是复制 Stata 的 outreg2,在系数旁边用粗体显示重要的星星。

这是代表:

library(huxtable)
library(flextable)
lm(formula=mpg~cyl+hp, mtcars) %>% huxreg() %>% as_flextable()

现在,我正在尝试将重要的星星以粗体显示在系数旁边,中间没有 space。

如果有人能插话,那就太好了!我正在查看 ftExtra,但我看不出如何解决这个问题。

谢谢!

有了 flextable,你可以很容易地通过添加一个 signif 来做到这一点。 p 值列之后的列并使用 0 填充。

以下代码演示如何从头开始:

x <- lm(formula=mpg~cyl+hp, mtcars)

library(flextable)
library(broom)
library(magrittr)

pvalue_format <- function(x){
  z <- cut(x, breaks = c(-Inf, 0.001, 0.01, 0.05, 0.1, Inf), labels = c("***", "**", "*", ".", ""))
  as.character(z)
}

tidy(x) %>% 
  flextable(
    col_keys = c("term", "estimate", "std.error", "statistic", "p.value", "signif")) %>% 
  colformat_double(digits = 4) %>% 
  mk_par(j = "signif", value = as_paragraph(pvalue_format(p.value)) ) %>% 
  set_header_labels(term = "", estimate = "Estimate",
                    std.error = "Standard Error", statistic = "t value",
                    p.value = "Pr(>|t|)", signif = "" ) %>% 
  align(j = "signif", align = "left") %>% 
  padding(padding.right = 0, j = "p.value", part  = "all") %>% 
  bold(j = "signif", bold = TRUE) %>% 
  padding(padding.left = 0, j = "signif", part  = "all") %>% 
  autofit()

您也可以使用 flextable::as_flextable 方法并根据您的需要调整结果:

as_flextable(x) %>% 
  delete_part(part = "footer") %>% 
  padding(padding.right = 0, j = "p.value", part  = "all") %>% 
  padding(padding.left = 0, j = "signif", part  = "all") %>% 
  color(i = ~ p.value > .05, j = "p.value", color = "gray") %>% 
  theme_vanilla()

这是一种可能性:

lm(formula=mpg~cyl+hp, mtcars) |> 
      huxreg(
        stars = c(
          '__*__' = 0.05,  
          '__**__' = 0.01
        )
      ) |> 
      set_markdown(2:6, 2, TRUE) |>
      as_flextable()

这使用 markdown 来加粗星星。

flextable 可能会出错。如果是这样,您可以另存为 HTML 或 RTF 格式并转换为 Word。 (并报告错误。)