2016-11-29 8 views
0

У меня есть эта таблица, в которой я хотел бы сделать в формате PDF с использованием PANDOC в файле RMDцветные клетки pandoc таблицы

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

Как окрасить клетки «GroupA» и столбцы «GroupB» с условное форматирование, как:

>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

Для визуализации в HTML или PDF? Если первый, проверьте [formattable] (https://renkun.me/formattable/). – alistaire

+0

Я не могу использовать formattable, потому что это PDF – user3022875

ответ

1

Если вы рендеринга в PDF, вы (или кто-либо еще функции) должны отформатировать таблицу с LaTeX. Хотя есть много полезных пакетов и функций, которые сделают для вас всю работу (knitr::kable, xtable, stargazer), если вам нужен мелкозернистый элемент управления, вам, возможно, потребуется отредактировать LaTeX самостоятельно, по крайней мере частично.

Разумно безболезненно вариант Hmisc::latex, который создаст таблицу из data.frame, и имеет параметр (среди многих) cellTexCmds, что позволяет прохождение укладки для отдельных ячеек с помощью матрицы аналогичных размеров на data.frame. Параметр file равен '', поэтому он не сохраняет файл и where = '!htbp', поэтому таблица отображается в нужном месте в документе. Чтобы установить цвет фона ячейки, вам понадобятся пакеты xcolor или colortbl LaTeX, которые могут быть загружены в исходную линейку YAML.

Чтобы исключить комментарий LaTeX, возьмите вывод, подмножество и печать или просто используйте .Rnw вместо .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

У меня нет этого «% latex.default (df, file =" ", cellTexCmds = df.format, где ="! Htbp ")%". знаете ли вы какой-либо другой вариант использования rmd? – user3022875

+0

'latex' предназначен для записи в файл, поэтому вы можете записать файл и импортировать его с помощью' readLines', пропустив первую строку. Тем не менее, попытка заставить его написать файл делает R зависанием для меня по необъяснимым причинам, поэтому возможно более простое обходное решение - захватить вывод, подмножество и печать: 'cat (capture.output ( Hmisc :: latex (df , file = '', cellTexCmds = df.format, где = "! htbp")) [- 1]) ' – alistaire