web-dev-qa-db-fra.com

Remplacer les noms de colonne dans la démarque kable / R

Mon bloc de données a des noms de colonnes moches, mais lors de l'affichage du tableau dans mon rapport, je veux leurs "vrais" noms, y compris les caractères spéciaux "(", nouvelles lignes, lettres grecques, noms répétés, etc.

Existe-t-il un moyen facile de remplacer les noms dans knitr pour permettre une telle mise en forme?

Solution proposée

Ce que j'ai essayé de faire, c'est de supprimer l'impression des noms de trame de données et d'utiliser add_header_above Pour de meilleurs noms et noms qui s'étendent sur plusieurs colonnes. Certains conseils que j'ai vus disent d'utiliser:

x <- kable(df)
gsub("<thead>.*</thead>", "", x) 

pour supprimer les noms de colonne. C'est bien, mais le problème est que lorsque j'ai par la suite add_header_above, Les noms des colonnes d'origine reviennent. Si j'utilise col.names=rep('',times=ncol(d.df)) dans kable(...) les noms ont disparu mais la ligne reste, laissant un espace entre mes nouveaux noms de colonnes et le corps du tableau. Voici un morceau de code pour illustrer:

```{r functions,echo=T}
drawTable <- function(d.df,caption='Given',hdr.above){
require(knitr)
require(kableExtra)
require(dplyr)

hdr.2 <- rep(c('Value','Rank'),times=ncol(d.df)/2)
x <- knitr::kable(d.df,format='latex',align='c',
  col.names=rep('',times=ncol(d.df))) %>%     
kable_styling(bootstrap_options=c('striped','hover',
  'condensed','responsive'),position='center',
   font_size = 9,full_width=F)

x %>% add_header_above(hdr.2) %>%
  add_header_above(hdr.above)
}
```

```{r}
df <- data.frame(A=c(1,2),B=c(4,2),C=c(3,4),D=c(8,7))
hdr.above <- c('A2','B2','C2','D2')
drawTable(df,hdr.above = hdr.above)
```

enter image description here

7
Dr Dave

Je ne sais pas où vous avez obtenu les conseils pour remplacer les noms de domaine, mais cela semble excessivement complexe. Il est beaucoup plus facile d'utiliser simplement l'argument col.names Intégré dans kable. Cette solution fonctionne pour les sorties HTML et LaTeX:

---
output:
  pdf_document: default
  html_document: default
---
```{r functions,echo=T}
require(knitr)

df <- data.frame(A=c(1,2),B=c(4,2),C=c(3,4),D=c(8,7))
knitr::kable(df, 
             col.names = c("Space in name",
                           "(Special Characters)",
                           "$\\delta{m}_1$",
                           "Space in name"))

```

Sortie PDF : enter image description here

Sortie HTML : enter image description here

27
Michael Harper