2016-11-29 5 views
0

Ich habe diese Tabelle, die Ich mag würde in PDF machen mit Pandoc in einer RMD DateiFarbzellen von pandoc Tabelle

table = data.frame(category = c("A","B","C"), groupA = c(.2,.3,.5), groupB= c(.6,.7,.9)) 
table 
pandoc.table(table,split.table = Inf,keep.line.breaks = TRUE) 

---------------------------- 
category groupA groupB 
---------- -------- -------- 
    A  0.2  0.6 

    B  0.3  0.7 

    C  0.5  0.9 
---------------------------- 

Wie kann ich die Zellen des „groupA“ Farbe und „groupB“ Spalten mit bedingte Formatierung wie:

>0 and <= .2 = "green" 
>.2 and <= .3 = "red" 
>.3 and <= .4 = "blue" 
>.4 and <= .5  = "orange" 
>.5 and <= .6  = "yellow" 
>.6 and <= .7  = "black" 
>.7 and <= .8  = "brown" 
>.8 = "white" 
+0

zu HTML oder PDF zu machen? Wenn der erste, überprüfen Sie [formatiert] (https://renkun.me/formattable/). – alistaire

+0

Ich kann formatable nicht benutzen, weil es PDF ist – user3022875

Antwort

1

Wenn Sie PDF rendern, können Sie (oder jemand andere Funktion) haben Sie Ihre Tabelle mit LaTeX zu formatieren. Während es viele hilfreiche Pakete und Funktionen gibt, die die ganze Arbeit für Sie erledigen werden (knitr::kable, xtable, stargazer), müssen Sie LaTeX möglicherweise zumindest teilweise selbst bearbeiten, wenn Sie eine feinkörnige Steuerung benötigen.

Eine relativ schmerzfreie Option ist Hmisc::latex, die die Tabelle aus dem data.frame erstellt und einen Parameter (unter vielen) cellTexCmds hat, der das Übergeben von Styling für einzelne Zellen über eine Matrix mit ähnlichen Abmessungen wie data.frame ermöglicht. Der file Parameter zu '' so speichert es keine Datei und where = '!htbp', so dass die Tabelle an der richtigen Stelle im Dokument angezeigt wird. Um die Zellenhintergrundfarbe einzustellen, benötigen Sie die LaTeX-Pakete xcolor oder colortbl, die in das YAML Frontmatter geladen werden können.

Um den LaTeX-Kommentar zu entfernen, erfassen Sie die Ausgabe, Teilmenge und Druck oder verwenden Sie einfach .RNW anstelle von .RMD.

--- 
title: "Conditional Formatting" 
header-includes: 
    - \usepackage[table]{xcolor} 
output: 
    pdf_document: default 
--- 


```{r} 
df <- data.frame(category = c("A","B","C"), 
       groupA = c(.2,.3,.5), 
       groupB= c(.6,.7,.9)) 

df.format = matrix('', nrow = nrow(df), ncol = ncol(df)) 

df.format[, -1] <- paste0('cellcolor{', 
          sapply(df[-1], function(x){ 
           cut(x, breaks = c(0, seq(.2, .8, by = .1), 1), 
            labels = c('green', 'red', 'blue', 'orange', 
              'yellow', 'black', 'brown', 'white'))}), 
          '}') 

df.format 
``` 

```{r table, results='asis'} 
cat(capture.output(
    Hmisc::latex(df, file = '', cellTexCmds = df.format, where = "!htbp") 
    )[-1]) 
``` 

pdf image with formatted cells

+0

Ich kann nicht haben "% latex.default (df, file =" ", cellTexCmds = df.format, wo ="! Htbp ")%" zeigt. Kennen Sie eine andere Option zur Verwendung von RMD? – user3022875

+0

'Latex' ist entworfen, um in eine Datei zu schreiben, also könnte man eine Datei schreiben und sie mit' readLines' importieren, wobei die erste Zeile übersprungen wird. Wenn ich jedoch versuche, eine Datei zu schreiben, hängt R aus unerklärlichen Gründen für mich auf. Eine vielleicht einfachere Problemumgehung besteht darin, die Ausgabe, Teilmenge und den Ausdruck zu erfassen: 'cat (capture.output ( Hmisc :: latex (df , Datei = '', cellTexCmds = df.format, where = "! htbp")) [- 1]) ' – alistaire