如何在kabeleExtra中用cell_spec()填充表格的整个单元格?

How to fill entire cell of a table with cell_spec() in kabeleExtra?

提问人:Ben_89 提问时间:10/20/2023 更新时间:10/21/2023 访问量:39

问:

继刚才提出的这个问题之后,有谁知道我如何使用 中的函数填充单元格的整个背景?cell_spec()kableExtra

我在下面有一些虚拟数据,但我只能设法为文本的背景着色。我更喜欢填充整个单元格,并且我非常愿意在 R Markdown 文件中创建我的表格。有谁知道解决这个问题的方法?谢谢。kableExtra

library(kableExtra)

name <- paste("Name", LETTERS)
val <- rnorm(26, 100, 50)
d <- data.frame(name, val)

d$val <- cell_spec(d$val, background = if_else(d$val > mean(d$val) + sd(d$val),
                                              "#DBEBF6",
                                              if_else(d$val < mean(d$val) - sd(d$val),
                                                      "#FEE7DA",
                                                      "transparent")))

kbl(d, escape = FALSE) %>%
  kable_styling()
r kableextra

评论


答:

1赞 stefan 10/20/2023 #1

问题在于它只针对单元格内容,即包含内容的标签,而不是父表单元格,即标签。默认情况下,一些填充会添加到表格单元格的内容中。cell_specspantd8px

填充整个单元格的一个选项是使用 的参数 ,即将边距设置为 ,将填充设置为 ,以便单元格内容填充单元格的整个高度。此外,设置为填充单元格的整个宽度。extra_css=cell_spec-8px8pxdisplay: flex

library(kableExtra)

set.seed(123)

name <- paste("Name", LETTERS)
val <- rnorm(26, 100, 50)
d <- data.frame(name, val)

d$val <- cell_spec(d$val,
  background = dplyr::case_when(
    d$val > mean(d$val) + sd(d$val) ~ "#DBEBF6",
    d$val < mean(d$val) - sd(d$val) ~ "#FEE7DA",
    .default = "transparent"
  ),
  extra_css = "margin: -8px; padding: 8px; display: flex;"
)

kbl(d, escape = FALSE) %>%
  kable_styling()

enter image description here

编辑我们需要一些额外的 CSS 来居中对齐值(例如,参见 Aligning items in a flex container):display: flex

d$val <- cell_spec(d$val,
  background = dplyr::case_when(
    d$val > mean(d$val) + sd(d$val) ~ "#DBEBF6",
    d$val < mean(d$val) - sd(d$val) ~ "#FEE7DA",
    .default = "transparent"
  ),
  extra_css = paste(
    "margin: -8px; padding: 8px;",
    "display: flex; align-items: center;",
    "justify-content: center;",
    sep = "; "
  )
)

kbl(d,
  align = c("l", "c"),
  escape = FALSE
) %>%
  kable_styling()

enter image description here

评论

0赞 Ben_89 10/21/2023
谢谢你,@stefan。这很有效。我想知道是否有办法使单元格内容/文本居中。当我实现 中的参数时,即使使用 .您还有其他建议来确保色谱柱保持居中吗?谢谢。valextra_css = cell_spec()kbl(d, align = c("l", "c"))val
1赞 stefan 10/21/2023
嗨,本。看我的编辑。因为我们需要一些额外的CSS。display: flex
0赞 Ben_89 10/22/2023
谢谢你,@stefan!这非常有效,正是我所需要的!