kable 中的粗体单元格(格式 = 乳胶)基于变量组的行向最大值

Bold cells in kable (format = latex) based on rowwise largest value by group of variables

工作示例

set.seed(1234)
df <- data.frame(  x1 = rnorm(3), x2 = rnorm(3), z1 =rnorm(3), z2=rnorm(3))

产生

 x1       x2       z1       z2
-------  -------  -------  -------
 -1.207   -2.346   -0.575   -0.890
  0.277    0.429   -0.547   -0.477
  1.084    0.506   -0.564   -0.998

然后我可以使用

导出到乳胶
kable(df,format = "latex", digits = 3)

但我想以粗体显示跨行最大的单元格(x1 与 x2,以及 z1 与 z2)。所以在这个例子中,x1=-1.207 和 z1=-0.575 将在第一行中以粗体显示,x2=0.429 和 z2=-0.477 将在第二行中以粗体显示,依此类推

所以最终输出应该是

\begin{tabular}{r|r|r|r}
\hline
x1 & x2 & z1 & z2\
\hline
\textbf{-1.207} & -2.346 & \textbf{-0.575} & -0.890\
\hline
0.277 & \textbf{0.429} & -0.547 & \textbf{-0.477}\
\hline
\textbf{1.084} & 0.506 & \textbf{-0.564} & -0.998\
\hline
\end{tabular}

任何帮助都会很棒!

kableExtra 的单元格条件格式与 tidyverse 包结合使用,这是一次尝试,尽管我是第一个承认这似乎需要大量工作的人。

我确定有更好的方法。

```{r results='asis'}

library(dplyr)
library(tidyr)
library(tibble)
library(stringr)
library(kableExtra)

set.seed(1234)

df <-
  data.frame( x1 = rnorm(3), x2 = rnorm(3), z1 = rnorm(3), z2 = rnorm(3)) %>%
  rowid_to_column() %>%
  pivot_longer(-rowid)%>%
  mutate(group = str_sub(name, 1, 1),
  id = str_sub(name, -1, -1)) %>%
  group_by(group, rowid) %>%
  mutate(value = round(value, 3),
  value = ifelse(value == max(value), cell_spec(sprintf("%.3f", value), "latex", bold = TRUE),
                 sprintf("%.3f", value))) %>%
  ungroup() %>%
  select(-c(group, id)) %>%
  pivot_wider() %>% 
  select(-rowid)


kbl(df,
    booktabs = TRUE,
    escape = FALSE,
    align = "r")
```