2016-11-29 117 views
0

我有这个表,我想在RMD文件中使用PANDOC的PDF渲染色细胞

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

我怎样才能颜色的“A组”和“B组”列与细胞条件格式如:

>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

becasue它是PDF – user3022875

回答

1

如果您渲染为PDF,您(或其他人的功能)必须使用LaTeX格式化您的表格。虽然有很多有用的包和功能,将做所有的工作适合你(knitr::kablextablestargazer)的,如果你需要细粒度控制,你可能需要编辑乳胶自己,至少在一部分。

一个合理的无痛选项是Hmisc::latex,它将从data.frame中创建表格,并且有一个参数(众多中)cellTexCmds,允许通过类似尺寸的矩阵传递样式给data.frame。该file参数''所以它不保存文件,并where = '!htbp'所以表出现在文档中的正确位置。要设置单元格背景颜色,你需要的xcolorcolortbl LaTeX的包,它可以在YAML frontmatter加载。

为了消除LaTeX的评论,捕获输出,子集和打印,或只是使用的,而不是.Rmd .Rnw。

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

我不能使用formattable我不能有这样的 “%latex.default(DF,文件=‘’,cellTexCmds = df.format,其中=‘!htbp’)%” 表示。你知道使用rmd的其他选择吗? – user3022875

+0

'latex'被设计为写入一个文件,所以你可以写一个文件并用'readLines'导入它,跳过第一行。然而,试图让它写一个文件正在[R挂起我无法解释的原因,所以也许更简单的解决方法是捕获输出,子集,并打印:'猫(capture.output( Hmisc ::乳胶(DF ,file ='',cellTexCmds = df.format,where =“!htbp”))[ - 1])' – alistaire