使用 knitr kable 函数对齐列
Posted
技术标签:
【中文标题】使用 knitr kable 函数对齐列【英文标题】:Aligning Columns with knitr kable function 【发布时间】:2017-05-12 22:34:28 【问题描述】:我正在执行一个简单的任务:创建一个表并使用R Markdown
将其输出到pdf
,如下所示:
library(knitr)
kable(datatable,align='ccccccc',
col.names = c("Copy","Sigma Est","Sigma Lower","Sigma Upper",
"Lambda Est","Lambda Lower","Lambda Upper"),digits=3)
问题
当我输出表格时,列没有居中。实际上,对于某些表格,它们与其他表格右对齐 - 左对齐,这对我来说似乎相当随机。
问题
如何使用包knitr
中的R
函数kable
控制列的对齐方式,即,我做错了什么?
编辑
跑步:
library(knitr)
kable(datatable,align=c(rep('c',times=7)),
col.names = c("Copy","Sigma Est","Sigma Lower","Sigma Upper",
"Lambda Est","Lambda Lower","Lambda Upper"),digits=3)
产量:
| Copy | Sigma Est | Sigma Lower | Sigma Upper | Lambda Est | Lambda Lower | Lambda Upper |
|:----:|:---------:|:-----------:|:-----------:|:----------:|:------------:|:------------:|
| 0 | 14.631 | 12.275 | 16.987 | 0.129 | 8.778 | 9.296 |
| 1 | 16.988 | 14.275 | 19.700 | 0.136 | 8.190 | 8.736 |
| 2 | 20.850 | 17.517 | 24.183 | 0.129 | 8.595 | 9.113 |
| 3 | 20.551 | 17.229 | 23.874 | 0.127 | 9.015 | 9.523 |
| 4 | 22.651 | 18.993 | 26.310 | 0.127 | 8.969 | 9.478 |
| 5 | 23.369 | 19.652 | 27.086 | 0.127 | 8.599 | 9.108 |
这正是我想要的,因为:---:
表示列居中,但是,当我按下Knit PDF
并生成pdf
文档时,所有列仍然是左对齐的。我该如何解决?
【问题讨论】:
【参考方案1】:您想为kable
提供与列数相等的对齐字符串向量。如帮助文件中所述,
列的对齐方式:由“l”(左)、“c”(中)和/或“r”(右)组成的字符向量;默认情况下,数值列右对齐,其他列左对齐;如果 align = NULL,则使用默认对齐方式。
这是一个可重现的例子。
没有任何对齐值,字符列左对齐,数字列右对齐,如下所示。
library(knitr)
kable(head(mtcars[1:5]))
返回
| | mpg| cyl| disp| hp| drat|
|:-----------------|----:|---:|----:|---:|----:|
|Mazda RX4 | 21.0| 6| 160| 110| 3.90|
|Mazda RX4 Wag | 21.0| 6| 160| 110| 3.90|
|Datsun 710 | 22.8| 4| 108| 93| 3.85|
|Hornet 4 Drive | 21.4| 6| 258| 110| 3.08|
|Hornet Sportabout | 18.7| 8| 360| 175| 3.15|
|Valiant | 18.1| 6| 225| 105| 2.76|
为了使数字列居中对齐,同时保持字符列右对齐,我使用了以下内容。
kable(head(mtcars[1:5]), align=rep('c', 5))
| | mpg | cyl | disp | hp | drat |
|:-----------------|:----:|:---:|:----:|:---:|:----:|
|Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 |
|Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 |
|Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 |
|Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 |
|Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 |
|Valiant | 18.1 | 6 | 225 | 105 | 2.76 |
如果将以下文本复制到 .Rmd 文件中,将返回表格,并根据需要格式化为 pdf 文件。
---
title: "Untitled"
output: pdf_document
---
this thing
```r table1, as.is=TRUE
library(knitr)
kable(head(mtcars[1:5]))
```
is not a centered table, while this thing
```r table2, as.is=TRUE
kable(head(mtcars[1:5]), align=rep('c', 5))
```
is a centered table.
【讨论】:
感谢您的回答,这解决了其中一个问题,我编辑了原始帖子以反映第二个问题。 我必须添加format="markdown"
才能解决后一个问题。
谢谢。这正是我所需要的。【参考方案2】:
更简单:kable(mtcars, align = "l")
工作得很好!
【讨论】:
不知道这个arg是不是kable的新增,但是这个答案需要更高!【参考方案3】:您还可以使用长度函数为向量/数据帧中的所有行创建向量,而无需对长度进行硬编码。下面的示例将 mtcars 数据框中的所有列左对齐,无论长度如何。
kable(mtcars, align=rep('l', length(mtcars[,1])))
【讨论】:
以上是关于使用 knitr kable 函数对齐列的主要内容,如果未能解决你的问题,请参考以下文章
r:在 Flexdashboard 中使用 Shiny 渲染 Kable
如何在带有`knitr::kable`的表格*上方添加标题?