【问题标题】:pivot wider - create two levels of headers for better readability更宽的枢轴 - 创建两个级别的标题以获得更好的可读性
【发布时间】:2021-10-30 18:00:30
【问题描述】:

有六个回归模型。我使用了更宽的枢轴,但很难阅读。 我可以使用两级标题 -

  • 第一级 - 回归模型
  • 第二级 - 估计,tstat
library(dplyr)

regression <- c(rep("A", 3), rep("B", 3), rep("C", 3), rep("D", 3), rep("E", 3), rep("F", 3))
attribute <- rep(c("b0", "b1", "b2"), 6)
estimate <- round(runif(n = 18, min = 0, max = 10), 2)
tstat <- round(runif(n = 18, min = 0, max = 10), 2)

# tibble
tbl <- tibble(regression, attribute, estimate, tstat)

# pivot wider
tbl <- tbl %>% 
  pivot_wider(names_from = regression,
              values_from = c("estimate", "tstat"))

【问题讨论】:

  • 你想在哪里使用这个输出?将标题文本放入数字列会将这些列转换为字符,这将改变您使用它们的方式。还是用于输出例如一个 Rmarkdown 文档,在这种情况下,您希望使用特定于格式化表格的包以进行显示?

标签: r dplyr


【解决方案1】:

一个选项是separate_header 来自ftExtra

library(ftExtra)
library(dplyr)
library(tidyr)
library(stringr)
tbl %>% 
     pivot_wider(names_from = regression,
                 values_from = c("estimate", "tstat")) %>% 
     rename_with(~ str_replace(., "(.*)_(.*)", "\\2_\\1"), -1) %>%
     as_flextable() %>%
     separate_header()

-输出


或者可以使用span_header

library(flextable)
tbl %>%  
  pivot_wider(names_from = regression,
              values_from = c("estimate", "tstat")) %>%   
  rename_with(~ str_replace(., "(.*)_(.*)", "\\2_\\1"), -1) %>% 
  select(attribute, order(str_remove(names(.)[-1], "_.*")) + 1) %>% 
  as_flextable() %>% 
  span_header()  %>% 
  align(align = "center", part = "all")

-输出


如果我们需要使某些列粗体

tbl %>%  
    pivot_wider(names_from = regression,
                values_from = c("estimate", "tstat")) %>%   
    rename_with(~ str_replace(., "(.*)_(.*)", "\\2_\\1"), -1) %>% 
    mutate(across(ends_with('tstat'),  ~sprintf('**%.2f**', .))) %>% 
    select(attribute, order(str_remove(names(.)[-1], "_.*")) + 1) %>% 
    as_flextable() %>% 
    span_header()  %>% 
    align(align = "center", part = "all") %>% 
    colformat_md()

-输出

【讨论】:

  • 谢谢。是否可以将回归模型组合在一起(例如 - As、Bs、...)
  • Thnaks,这几乎是正确的,上层标题不准确(A 应该跨越从估计到 tstat)
  • 非常感谢
  • @TarJae 本身没有重复的列名。如果您在select 步骤之前检查输出。 span_headerseparate_header_ 处进行拆分以拆分列名。这些列是有序的,因此所有以“A”开头的列都是相邻的,然后是“B”列,等等,然后我们应用 span_header。就像head(iris) %&gt;% as_flextable() %&gt;% span_header() %&gt;% align(align = "center", part = "all")
  • 太棒了。谢谢大师!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2013-11-03
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多