【问题标题】:Include label attribute into kable header [closed]将标签属性包含到 kable 标头中[关闭]
【发布时间】:2016-01-23 07:17:50
【问题描述】:

可重现的例子:

我有一个数据框,它带有标记变量以使用 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)

现在我想使用knitr 中的kable 函数通过knitr/rmarkdown/html 工具链将这个数据框打印为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:

问题:

很遗憾,单位的标签没有用作标题中的第二行。

问题:

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

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

如何重写kable(在这种情况下用于 html 输出)以满足这些要求并与标记的数据帧一起使用?

【问题讨论】:

  • 我认为这太宽泛了。 kable 实际上是多个程序,您的要求似乎比期望紧凑解决方案的合理要求更多。看代码。您可以看到 kable 实际上调用了 4 个独立程序之一:res = do.call(paste("kable", format, sep = "_"), 其中格式是以下之一:“markdown”、“latex”、“html”、“rst”。
  • 什么?这不是exactly the same question,除了输出格式是HTML,另一个问题是PDF?这不会使此问题重复,但请在下次提问时将此类信息添加到问题中。

标签: html r knitr r-markdown


【解决方案1】:

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 包中的其他函数来自定义表格的外观(表格的格式可以很容易地绑定到自定义函数中,以便将来更轻松地应用格式)。

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

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2014-11-29
    • 2021-01-25
    • 2021-08-19
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多