2016-10-21 5 views
0

Ich habe einen Datenrahmen, die ich mit der rechten Ausrichtung in Rmarkdown in eine Tabelle umwandeln möchtenXTABLE rechts ausrichten und setzen Breite Rmarkdown

--- 
title: "Test" 
output: 
    pdf_document 
--- 

```{r testing, results='asis'} 
library(xtable) 
df <- structure(list(ID = c(101L, 102L, 103L, 104L, 105L, 106L), 
         Gr1 = c(10.76,983.4, 34.000, 20, 23.8457, 13.32), 
         Gr2 = c(NA,NA, NA, 20L, NA, NA) 
         ), 
        .Names = c("ID", "Grade1", "Grade2"), 
        class = c("tbl_df", "data.frame"), 
        row.names = c(NA, -6L)) 
xtable(df, 
     align = c('l', 'p{1.5in}', rep('r{0.5in}',2)), 
     digits=c(0,0,1,0)) 
``` 

Das gibt mir einen Fehler auf dem rep('r{0.5in}',2)

! LaTeX Error: Illegal character in array arg. 

I habe auch versucht: align = c('l|', 'p{1.5in}|', rep('R{0.5in}|',2))

folgende Arbeiten fein: align = c('l', 'p{1.5in}', rep('p{0.5in}',2))

The data isn't right aligned

Aber die Daten nach links ausgerichtet ist

+0

ich nicht hol dir deinen Punkt: Wenn du die letzten zwei Spalten nach rechts machen willst, dann 'rep ('r', 2)'. Nur das Argument 'p' hat ein width-Argument. –

+0

Aber würde das Breite Argument für die letzten zwei Spalten nicht loswerden? Ich brauche sowohl die Breite als auch die rechte Ausrichtung – pluke

+1

'r, l, c' nimmt standardmäßig kein width Argument. Sie müssen einen benutzerdefinierten Spaltentyp namens 'R, L, C' erstellen, um das gewünschte Ergebnis zu erhalten, das Sie finden können [Hier] (http://stackoverflow.com/questions/33208777/how-to-set-both -column-width-und-text-alignment-in-align-argument-von-xtable) – 9Heads

Antwort

0

Gelöst, muss ich zwei Include-Dateien erstellen, um den notwendigen Latex zu injizieren. Zuerst aktualisieren Sie die YAML auf der Abschlags-Datei:

--- 
title: "Test something" 
output: 
    pdf_document: 
    includes: 
     in_header: preamble-latex.tex 
     before_body: prebody-latex.tex 
--- 
<SNIP, SEE ABOVE> 

Dann preamble-latex.tex erstellen das Array Paket

\usepackage{array} 

Und schaffen prebody-latex.tex laden Ihre neue Spalte Befehl speichern

\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}} 
1

Hier eine Annäherung der Tabelle ist. Ich weiß nicht, dass ich die Breiten genau richtig habe. Klar ist da etwas faul passiert mit pixiedust, denn wenn ich width_units von "cm" zu "in" ändere, bekomme ich einen Tisch, der viel zu breit ist.

--- 
title: "Test" 
output: 
    pdf_document 
header-includes: 
- \usepackage{amssymb} 
- \usepackage{arydshln} 
- \usepackage{caption} 
- \usepackage{graphicx} 
- \usepackage{hhline} 
- \usepackage{longtable} 
- \usepackage{multirow} 
- \usepackage[dvipsnames,table]{xcolor} 
--- 

```{r testing, results='asis'} 
library(pixiedust) 
df <- structure(list(ID = c(101L, 102L, 103L, 104L, 105L, 106L), 
         Gr1 = c(10.76,983.4, 34.000, 20, 23.8457, 13.32), 
         Gr2 = c(NA,NA, NA, 20L, NA, NA) 
         ), 
        .Names = c("ID", "Grade1", "Grade2"), 
        class = c("tbl_df", "data.frame"), 
        row.names = c(NA, -6L)) 
dust(df, keep_rownames = TRUE, 
    float = FALSE) %>% 
    sprinkle_colnames(.rownames = "") %>% 
    medley_bw() %>% 
    sprinkle_table(cols = ".rownames", 
       border = "right") %>% 
    sprinkle_table(cols = c("Grade1", "Grade2"), 
       halign = "right") %>% 
    sprinkle(cols = c("ID", "Grade1", "Grade2"), 
      width = c(1.5, 0.05, 0.05), 
      width_units = "cm", 
      na_string = "", 
      recycle = "cols") %>% 
    sprinkle(cols = "Grade1", 
      fn = quote(sprintf("%.1f", value))) 

``` 
Verwandte Themen