R - Conditional row highlighting in HTML table created using xtable or kable
knitr, r, r-markdown, xtable
Solution
Here is a solution using `Gmisc::htmlTable`
set.seed(123)
df <- data.frame(id = sample(1:100, 20, replace = TRUE),
inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE),
outcome = sample(1:4, 20, replace = TRUE))
cols <- with(df, ifelse(outcome == 1, 'magenta', 'white'))
library(Gmisc)
htmlTable(as.matrix(df), altcol = cols,
rgroup = '', n.rgroup = rep(1, length(cols)))
EDIT
Since `htmlTable` has since been moved to the package, `htmlTable`, and is no longer in `Gmisc` >= 1.0, the new way to do this would be
library('htmlTable')
htmlTable(as.matrix(df), col.rgroup = cols)
which also gives:
and your markdown code would simply be
{r, results='asis'} htmlTable(as.matrix(df), altcol = cols, rgroup = '', n.rgroup = rep(1, length(cols)))
`
And my .Rmd would look like:
---
output:
html_document:
css: ~/knitr.css
---
{r, results='asis', message=FALSE} set.seed(123) df <- data.frame(id = sample(1:100, 20, replace = TRUE), inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE), outcome = sample(1:4, 20, replace = TRUE))
cols <- with(df, ifelse(outcome == 1, 'magenta', 'white'))
library(Gmisc) htmlTable(as.matrix(df), altcol = cols, rgroup = '', n.rgroup = rep(1, length(cols)))
`
Problem
I'm pretty much a beginner at programmatically formatting R output, but I've got a basic understanding of `knitr`, `xtable`, Markdown, and Pandoc's ability to convert one markup format to another. What I want to do is write an R dataframe `df` to an HTML table, and apply a particular color to each row that meets a condition (e.g., `df$outcome == 1`). However, I'm not sure which package would accomplish this in a simple and efficient way, but from browsing a few table formatting threads (`xtable` thread 1, `xtable` thread 2, `kable` documentation 1), I've gathered that `kable` and `xtable` might be capable of accomplishing my desired result. To clarify, here is my reproducible example (using `xtable`, but am interested in an answer using `kable` or another package as well): ``` set.seed(123) df <- data.frame(id = sample(1:100, 20, replace = TRUE), inputval = sample(seq(0, 1, by=0.01), 20, replace = TRUE), outcome = sample(1:4, 20, replace = TRUE)) library(xtable) dfxt <- xtable(df) knit2html(input = "~/rowcolor_ex.Rmd", output = OUTPUTHERE stylesheet = "STYLESHEET.css") ``` with`knit2html` referencing the file named "rowcolor_ex.Rmd", shown below: ```` ```{r,echo=FALSE,results='asis',warning=FALSE,message=FALSE} print(dfxt, type = "html", include.rownames = FALSE,) ``` ```` I understand that if I'm to use `xtable`, I'd include one or more arguments after the `print(dfxt,` part of the function call in the `Rmd` document, and this thread shows the `add.to.row` argument that makes sense for `type = "latex"`, but it isn't clear how the code would change for HTML output. Also, I'm not sure if referencing a CSS stylesheet in `knit2html` would override the HTML table's formatting.