将标签属性包含在kable标头中

时间:2016-01-23 07:17:50

标签: html r knitr r-markdown

可重复示例:

我有一个数据框,标有变量来表示使用sjmisc包的单位,从v0.4.2开始,它与dplyr很好地配合使用。

library(dplyr)
library(sjmisc)
library(ggplot2)
data("diamonds")

df= tbl_df(diamonds) %>%
select(cut, carat, color, price) %>%
set_label(c("", "Kt", "Type","EUR")) %>%
slice(1:5)

正如str(df)所示,它正确包含三列标签:

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   5 obs. of  4 variables:
 $ cut  : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2
 $ carat: atomic  0.23 0.21 0.23 0.29 0.31
  ..- attr(*, "label")= Named chr "Kt"
  .. ..- attr(*, "names")= chr "carat"
 $ color: Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7
  ..- attr(*, "label")= Named chr "Type"
  .. ..- attr(*, "names")= chr "color"
 $ price: atomic  326 326 327 334 335
  ..- attr(*, "label")= Named chr "EUR"
  .. ..- attr(*, "names")= chr "price"

同样使用R-Studio IDE,我可以看到标签View(df)

enter image description here

现在,我想使用knitr/rmarkdown/html中的kable函数通过knitr工具链将此数据框打印为html,其代码为.Rmd rmarkdown个文件

---
title: "Table with labels"
output: html_document
---

```{r include=FALSE}
library(dplyr)
library(sjmisc)
library(ggplot2)
library(knitr)
data("diamonds")
```

## Example

```{r echo=FALSE, results='asis'}
df= tbl_df(diamonds) %>%
  select(cut, carat, color, price) %>%
  set_label(c("", "Kt", "Type","EUR")) %>%
  slice(1:5)

kable(df)
```

导致html包含下表:

enter image description here

问题:

不幸的是,单位的标签不会用作标题中的第二行。

问题:

如何获得“克拉”下方的“Kt”,“颜色”下方的“类型”和“价格”下方的“EUR”作为第二个标题行?第二行应具有与第一行相同的水平居中。

我正在寻找一种解决方案而无需手动将标签手动添加到第二行,它应该自动将标签应用于打印的表格。如果可能,单位标签的字体大小应比第一行标题行小一点,或者没有粗体字。

如何重写kable(在这种情况下为html输出)以满足这些要求并与标记数据框一起很好地发挥作用?

1 个答案:

答案 0 :(得分:3)

kable的说明告诉我们

  

这是一个非常简单的表生成器。它设计简单。它不打算替换任何其他R包来制作表格。

所以我不希望你能直接用kable做到这一点。但是还有其他选择。它们在冗长,简单和高效方面各不相同。

这是使用pixiedust包的一种方法。

library(dplyr)
library(sjmisc)
library(ggplot2)
library(pixiedust)
data("diamonds")

df= tbl_df(diamonds) %>%
  select(cut, carat, color, price) %>%
  set_label(c("", "Kt", "Type","EUR")) %>%
  slice(1:5)

Head <- rbind(names(df),
              get_label(df)) %>%
  as.data.frame(., stringsAsFactors = FALSE)

dust(df) %>%
  redust(., Head, part = "head") %>%
  sprinkle_print_method("html")

您可以使用pixiedust包中的其他功能来自定义表的外观(并且可以轻松地将表的格式捆绑到自定义函数中,以便将来更轻松地应用格式化。)< / p>

我确信htmlTables也可以做到这一点,尽管我对它并不熟练。