【问题标题】:Adjusting width of tables made with kable() in RMarkdown documents调整 RMarkdown 文档中使用 kable() 制作的表格的宽度
【发布时间】:2017-06-13 12:15:16
【问题描述】:

在knitr中使用kable()函数制作表格时是否可以调整列宽?

对于一个有两列的表格,这样的块会生成一个占据整个文档宽度的表格。我想让列更窄。 这可以用 kable() 完成还是需要另一个包?

这个 rmarkdown 块

```{r}
df <- data.frame(x = 1:10,
           y = 11:20)
library(knitr)
kable(df)
```

生成此表

kable(df, align = "l") 左对齐有点帮助,但我希望两列彼此相邻。

【问题讨论】:

  • 我无法使用默认的 Rstudio .Rmd 文件进行复制,输出 PDF。
  • 从 (twitter.com/vrnijs/status/599275956247789568) 尝试 knitr::kable(x, format = "html", table.attr = "style='width:30%;'")
  • @MarBlo 值得回答。

标签: r knitr r-markdown


【解决方案1】:

您可以试用kableExtra 包。

kable(x, "html") %>%
  kable_styling(full_width = F)

【讨论】:

  • 这对我不起作用,因为 kable_styling 似乎不支持文档格式,只要您使用 libre office 它不起作用。我不知道 microsoft office 会如何处理输出
  • @hao:我在调整 kableExtra 表中的宽度时遇到了困难,该表还应该包含图像,请看这里:stackoverflow.com/questions/58204272/…您有什么建议吗?
  • @Hao 大礼包!我会添加这个额外的部分来完全按照你的意愿控制宽度。 kable(x, table.attr = "style='width:40%;'" ) %&gt;% kable_classic(full_width = T, position = "center", )
【解决方案2】:

我最喜欢的是 flextable 包,因为 1) 表格很漂亮,2) 您可以更轻松地控制宽度和字体大小等内容,以及 3) 它们可以很好地呈现 HTML 字。使用您的数据:

```{r}
library(flextable)
library(magrittr)
df <- data.frame(x = 1:10, y = 11:20)
df %>% regulartable() %>% autofit() %>% 
width(j=~x,width=1) %>% width(j=~y,width=1)
```

width 的两个值都设置为 1,列靠得很近:

如果将最后一行调整为width(j=~x,width=2) %&gt;% width(j=~y,width=2),表格如下所示:

【讨论】:

  • 根据flextable overview vignette,也可以使用df %&gt;% flextable() %&gt;% autofit()。如果您在安装 flextable 时遇到问题,请确保按照 here sudo apt install libcairo2-dev libjpeg-dev libgif-dev 的说明在系统级别安装 libcairo 依赖项。
【解决方案3】:

我知道我已经很久没有发表评论了。但正如@Tjebo 指出的那样,我的评论值得回答,我想听从他的建议。 通过定义表格格式并添加一些 CSS 样式,您可以更改类似的大小:knitr::kable(x, format = "html", table.attr = "style='width:30%;'")。 这可能会导致丢失表格线。 kableExtra 提供了很好的样式工具来添加例如线条。

library(knitr)
library(tidyverse)
library(kableExtra)

df <- data.frame(x = 1:10, y = 11:20)

kable(df, format = "html", table.attr = "style='width:30%;'")

kable(df, format = "html", table.attr = "style='width:30%;'") %>% 
  kableExtra::kable_styling()

【讨论】:

  • @Nbrouwer 也许值得考虑接受这个答案?
  • 请注意,明确的format = "html" 是必需的。如果您保留默认设置并编织到 html,则它不起作用
【解决方案4】:

我是 R 新手,但我的回答可能对这里的其他新手有用。请各位高手指正。

我遇到了与原始发帖人类似的问题:使用 kable() 我的表格不在页面上,我想重新缩放。我尝试了发布的其他答案但没有成功,原因可能是我没有(根本或正确地)安装 kableExtra 或 magrittr(允许您使用 %>% 的软件包)。

最终,我最终使用了 latex_options="scale_down",见下文:

endpoints <- read.delim("D:/RFiles/GenericName/Endpoints.txt",
            header=TRUE, sep="\t", dec=".")
endpoints_table <- knitr::kable(endpoints,col.names=gsub(" 
                   [.]"," ",names(endpoints)), align="l", 
                   caption = "Endpoints Available")
kable_styling(endpoints_table,latex_options="scale_down",
              "striped") %>%
  row_spec(0,bold=TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 2023-04-08
    • 2019-07-10
    • 2019-04-24
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多