web-dev-qa-db-fra.com

Alignement des colonnes avec la fonction knitr kable

J'effectue une tâche simple: créer une table et la sortir à l'aide de R Markdown à pdf comme suit:

library(knitr)
kable(datatable,align='ccccccc',
col.names = c("Copy","Sigma Est","Sigma Lower","Sigma Upper", 
"Lambda Est","Lambda Lower","Lambda Upper"),digits=3)

Problème

lorsque je génère le tableau, les colonnes ne sont pas centrées. En fait, pour certains tableaux, ils sont alignés à droite pour d'autres - alignés à gauche, ce qui me semble plutôt aléatoire.

Question

Comment puis-je contrôler l'alignement des colonnes avec la fonction Rkable du package knitr, c'est-à-dire, qu'est-ce que je fais mal?

MODIFIER

Fonctionnement:

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)

Rendements:

| 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     |

C'est exactement ce que je veux en tant que :---: indique le centrage des colonnes, cependant, lorsque j'appuie sur Knit PDF et un document pdf est produit, toutes les colonnes sont toujours alignées à gauche. Comment puis-je contourner cela?

13
Kivis

Vous souhaitez alimenter kable un vecteur de chaînes d'alignement égal au nombre de colonnes. Comme mentionné dans le fichier d'aide,

l'alignement des colonnes: un vecteur de caractères composé de "l" (gauche), "c" (centre) et/ou "r" (droite); par défaut, les colonnes numériques sont alignées à droite et les autres colonnes sont alignées à gauche; si align = NULL, l'alignement par défaut est utilisé.

Voici un exemple reproductible.

Sans aucune valeur d'alignement, les colonnes de caractères sont alignées à gauche et les colonnes numériques sont alignées à droite comme vous pouvez le voir ci-dessous.

library(knitr)

kable(head(mtcars[1:5]))

qui revient

|                  |  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|

Pour obtenir les colonnes numériques alignées au centre, tout en gardant la colonne de caractères alignée à droite, j'ai utilisé ce qui suit.

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 |

Le texte suivant, s'il est copié dans un fichier .Rmd, renverra le tableau, formaté comme souhaité en tant que fichier 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.
19
lmo

Vous pouvez également utiliser la fonction de longueur pour créer un vecteur pour toutes les lignes d'un vecteur/trame de données sans avoir à coder en dur une longueur. L'exemple ci-dessous aligne à gauche toutes les colonnes du bloc de données mtcars, quelle que soit la longueur.

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