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 R
kable
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?
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.
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])))