使用knitr kable函数

时间:2016-12-28 15:55:24

标签: r pdf knitr r-markdown

我正在执行一项简单的任务:创建一个表并使用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)

问题

当我输出表格时,列不居中。实际上,对于某些表格而言,它们与其他表格正确对齐 - 左对齐,这对我而言似乎相当随意。

问题

如何控制来自包R的{​​{1}}函数kable的列对齐,即我做错了什么?

修改

运行:

knitr

收率:

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文档时,所有列仍然是左对齐的。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:11)

您希望向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.

答案 1 :(得分:0)

您还可以使用长度功能为向量/数据帧中的所有行创建向量,而无需硬编码长度。下面的示例将mtcars数据框中的所有列都左对齐,无论长度如何。

 kable(mtcars, align=rep('l', length(mtcars[,1])))

答案 2 :(得分:0)

更容易:kable(mtcars, align = "l")正常工作!