在RMarkdown文档

时间:2017-01-27 18:05:50

标签: r knitr r-markdown

在knitr中使用kable()函数创建表时是否可以调整列的宽度?

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

这个rmarkdown chunk

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

生成此表 enter image description here

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

4 个答案:

答案 0 :(得分:17)

您可以试用kableExtra包。

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

答案 1 :(得分:5)

我知道距发表评论已有很长时间了。但是正如@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()

答案 2 :(得分:2)

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

```{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,这些列紧密相连:

flextable-1

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

flextable-2

答案 3 :(得分:0)

我是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)