繁体   English   中英

R - 带有 Flextable 库的交叉表亮点

[英]R - Crosstable highlights with Flextable library

根据下面的示例,我需要在交叉表中按行突出显示(用粗体或某种颜色)最大计数。 但我似乎在任何地方都找不到如何在交叉表中做到这一点。 有人有提示吗? 提前致谢!

library(tidyverse)
library(gtsummary)
library(flextable)

tib <- tibble(x=c(1,2,3,2,2,1,3,2,4,1,2,3,2,2,1,3,2,4),
              y=c("a","b","c","a","b","b","b","b",NA,"a","b","c","a","b","b","b","c",NA))


tib %>%  
  tbl_cross(percent = "row",
            missing_text = "NA") %>% 
  as_flex_table() 

David Gohel 是正确的……这是可能的,但这不是一个简单的解决方案。 计数的未格式化(即数字)版本内部保存在 gtsummary object 中。 我们可以访问它们,找到最大计数,并使用modify_table_styling() function 构造调用以加粗单元格。

下面的例子。

library(gtsummary)
packageVersion("gtsummary")
#> [1] '1.5.2'

tib <- tibble::tibble(
  x=c(1,2,3,2,2,1,3,2,4,1,2,3,2,2,1,3,2,4),
  y=c("a","b","c","a","b","b","b","b",NA,"a","b","c","a","b","b","b","c",NA))


tbl <- 
  tib %>%  
  tbl_cross(percent = "row",
            missing_text = "NA")

# find cell(s) with max count per row
df_max_count <- 
  purrr::pluck(tbl, "meta_data", "df_stats", 1) %>% 
  dplyr::filter(!is.na(by)) %>% 
  dplyr::group_by(variable_levels) %>%
  dplyr::filter(n == max(n)) %>%
  dplyr::select(variable_levels, col_name, n) %>%
  dplyr::ungroup()

# construct calls to bold cells
call_list <-
  purrr::map2(
    df_max_count$variable_levels,
    df_max_count$col_name,
    ~rlang::expr(
      modify_table_styling(columns = !!.y,
                           rows = label %in% !!.x,
                           text_format = "bold")
    )
  )

# evaluate calls in tbl_cross
tbl_final <-
  call_list %>%
  purrr::reduce(~ rlang::expr(!!.x %>% !!.y) %>% eval(), .init = tbl)

在此处输入图像描述 代表 package (v2.0.1) 于 2022 年 1 月 31 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM