【问题标题】:Flextable: make the signif stars bold and remove the space between stars and the coefficientFlextable:使signif星星加粗并删除星星和系数之间的空间
【发布时间】:2022-01-09 12:02:42
【问题描述】:

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

这里是代表:

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

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

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

谢谢!

【问题讨论】:

    标签: r flextable


    【解决方案1】:

    这是一种可能性:

    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。 (并报告错误。)

    【讨论】:

    • 感谢您的代码!无论是否有 1 个或多个这样的列,是否可以自动将降价应用于具有重要星号的列?我正在尝试以下代码,但它给出了一个错误(rep(list(flatten_branch),n)中的错误:无效的'times'参数):lm(formula = mpg〜cyl + hp,mtcars)%>%huxreg(number_format =3, 注意=NULL, 星星 = c( '' = 0.1, '*' = 0.05, ' **' = 0.01 )) %>%set_number_format(3) %>% huxtable::set_markdown(.,everywhere ,tidyselect::matches(""), TRUE) %>% huxtable: :as_flextable()
    • 是的,你可以。最简单的方法是了解表格尺寸并从中计算出“应该”在哪里有重要星。您可能希望 grepl 搜索内容,而不是 matches 搜索列名。
    【解决方案2】:

    使用 flextable,您可以通过添加符号来轻松完成。 p-values 列之后的列并使用 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()
    

    【讨论】:

    • 这很有用!谢谢你。不过,我在这里有点困惑:这些都不是粗体中的重要明星吗?只是星星,而不是系数。
    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多