[英]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.