根据单元格值使用 kableExtra 为行着色
Coloring rows with kableExtra based on cell values
我结合使用 R markdown 和 LaTeX 创建 PDF 报告。为了生成 tables,我使用了 kableExtra 包。
我想根据特定列中的值更改行的样式。我一直在尝试 cell_spec,但据我所知,它只会更改列中值的样式,而不是整行。
例如,在下面的 table 中,我想突出显示所有超过 6 个汽缸的汽车。所以结果应该是这样的:
library(knitr)
library(kableExtra)
library(tidyverse)
mtcars |>
slice(1:5) |>
select(mpg:wt) |>
kable(booktabs = T) %>%
kable_styling() %>%
row_spec(5, bold = T, color = "white", background = "red")
但是我在这里指定了一个行号,我不想这样做。应根据气缸数自动决定。使用 cell_spec,我能够得到以下内容:
mtcars |>
slice(1:5) |>
select(mpg:wt) |>
rownames_to_column('cars') %>% # used to store row names (mutate deletes them)
mutate(
cyl = cell_spec(cyl, color = ifelse(cyl > 6, "white", "black"),
background = ifelse(cyl > 6, "red", "white"),
bold = ifelse(cyl > 6, T, F))) %>%
column_to_rownames('cars') %>% # used to put row names back in place
kable(escape = F, booktabs = T) %>%
kable_styling()
但这只会更改柱面列中的值,不会更改该行的其余部分。
我的问题有解决方案吗(最好不要为每个样式选项指定条件)?
编辑:
这是一个与 不同的问题,在 中有人想要根据该列中的值格式化该列,但希望排除某些 rows/entries。我不想排除任何行,但我希望格式适用于整行(仍然以特定列中的值为条件)。
我认为最简单的方法是根据您的标准传递要着色的行列表。
library(kableExtra)
df<- mtcars
color.me <- which(df$cyl >6)
df %>%
kable(booktabs = T) %>%
kable_styling() %>%
row_spec(color.me, bold = T, color = "white", background = "red")
或在与以下相同的管道中:
df %>%
kable(booktabs = T) %>%
kable_styling() %>%
row_spec(which(df$cyl >6), bold = T, color = "white", background = "red")
我结合使用 R markdown 和 LaTeX 创建 PDF 报告。为了生成 tables,我使用了 kableExtra 包。
我想根据特定列中的值更改行的样式。我一直在尝试 cell_spec,但据我所知,它只会更改列中值的样式,而不是整行。
例如,在下面的 table 中,我想突出显示所有超过 6 个汽缸的汽车。所以结果应该是这样的:
library(knitr)
library(kableExtra)
library(tidyverse)
mtcars |>
slice(1:5) |>
select(mpg:wt) |>
kable(booktabs = T) %>%
kable_styling() %>%
row_spec(5, bold = T, color = "white", background = "red")
但是我在这里指定了一个行号,我不想这样做。应根据气缸数自动决定。使用 cell_spec,我能够得到以下内容:
mtcars |>
slice(1:5) |>
select(mpg:wt) |>
rownames_to_column('cars') %>% # used to store row names (mutate deletes them)
mutate(
cyl = cell_spec(cyl, color = ifelse(cyl > 6, "white", "black"),
background = ifelse(cyl > 6, "red", "white"),
bold = ifelse(cyl > 6, T, F))) %>%
column_to_rownames('cars') %>% # used to put row names back in place
kable(escape = F, booktabs = T) %>%
kable_styling()
但这只会更改柱面列中的值,不会更改该行的其余部分。
我的问题有解决方案吗(最好不要为每个样式选项指定条件)?
编辑:
这是一个与
我认为最简单的方法是根据您的标准传递要着色的行列表。
library(kableExtra)
df<- mtcars
color.me <- which(df$cyl >6)
df %>%
kable(booktabs = T) %>%
kable_styling() %>%
row_spec(color.me, bold = T, color = "white", background = "red")
或在与以下相同的管道中:
df %>%
kable(booktabs = T) %>%
kable_styling() %>%
row_spec(which(df$cyl >6), bold = T, color = "white", background = "red")