Conditional formatting

Example in rmarkdown using pander

  • Useful for pandoc/markdown documents
  • Only useful for bold/italicized formatting
  • Can be converted to MS word
  • Updated 2/20/15

Custom highlighting

# Load and organize data
load("tab_diab.RData")
tab_diab <- select(tab_diab, 1 , 7,  10)
tab_diab[, "Meandiff_Pval"] <- round(tab_diab[, "Meandiff_Pval"], 3)


# Create sequence of even rows
seqs1 <- seq(2, nrow(tab_diab), by = 2)
seqs1
## [1] 2 4
# Add bold to rows
emphasize.strong.rows(seqs1)
# Show table
pander(tab_diab)
Variable Meandiff Meandiff_Pval
chol 25.21 0.002
hdl -5.893 0.015
age 13.74 0
height 0.2186 0.691
weight 18.11 0.002
# Find row/col entries of significance
wh1 <- which(tab_diab < 0.05 & tab_diab >= 0, arr.ind = T)
wh1
##      row col
## [1,]   1   3
## [2,]   2   3
## [3,]   3   3
## [4,]   5   3
# Add bold
emphasize.strong.cells(wh1)
pander(tab_diab)
Variable Meandiff Meandiff_Pval
chol 25.21 0.002
hdl -5.893 0.015
age 13.74 0
height 0.2186 0.691
weight 18.11 0.002
# Add italicized
emphasize.cells(wh1)
pander(tab_diab)
Variable Meandiff Meandiff_Pval
chol 25.21 0.002
hdl -5.893 0.015
age 13.74 0
height 0.2186 0.691
weight 18.11 0.002

Better formatting for R output

# Run standard linear model
glm1 <- lm(Ozone ~ Temp, data = airquality)
# Nice markdown output
pander(glm1)
Fitting linear model: Ozone ~ Temp
  Estimate Std. Error t value Pr(>|t|)
Temp 2.429 0.2331 10.42 2.932e-18
(Intercept) -147 18.29 -8.038 9.367e-13
pander(summary(glm1))
  Estimate Std. Error t value Pr(>|t|)
Temp 2.429 0.2331 10.42 2.932e-18
(Intercept) -147 18.29 -8.038 9.367e-13
Fitting linear model: Ozone ~ Temp
Observations Residual Std. Error \(R^2\) Adjusted \(R^2\)
116 23.71 0.4877 0.4832

Add significance stars

# Resave output
tab_diab2 <- tab_diab
# Add stars to pvalue
tab_diab2[, "Meandiff_Pval"] <- add.significance.stars(tab_diab[, "Meandiff_Pval"])
pander(tab_diab2)
Variable Meandiff Meandiff_Pval
chol 25.21 0.002 * *
hdl -5.893 0.015 *
age 13.74 0 * * *
height 0.2186 0.691
weight 18.11 0.002 * *

Example in html using htmlTable

  • Uses html formatting
  • Can control row/column shading
  • Updated 4/21/15
  • Does not work with MS word
  • specify results = "asis"

Row shading

# Get alternating row color shading
cols <- rep(c("white", "grey"), length = nrow(tab_diab))
# Get html table
h1 <- htmlTable(tab_diab, col.rgroup = cols)
h1
Variable Meandiff Meandiff_Pval
1 chol 25.2139817629179 0.002
2 hdl -5.89295845997974 0.015
3 age 13.7393939393939 0
4 height 0.218571280024946 0.691
5 weight 18.1088341037494 0.002

Reformat pvalues

tab_diab[, 3] <- txtPval(tab_diab[, 3])
h1 <- htmlTable(tab_diab, col.rgroup = cols)
h1
Variable Meandiff Meandiff_Pval
1 chol 25.2139817629179 0.002
2 hdl -5.89295845997974 0.015
3 age 13.7393939393939 < 0.0001
4 height 0.218571280024946 0.69
5 weight 18.1088341037494 0.002

Add more formatting

# Define text colors for each cell
cols2 <- matrix(rep(c("color: #FF00FF;", "color: #6666FF;"), 
  length = nrow(tab_diab) *3), ncol = 3, byrow = F)
h1 <- htmlTable(tab_diab, css.cell = cols2)
h1
Variable Meandiff Meandiff_Pval
1 chol 25.2139817629179 0.002
2 hdl -5.89295845997974 0.015
3 age 13.7393939393939 < 0.0001
4 height 0.218571280024946 0.69
5 weight 18.1088341037494 0.002
# Define cgroups
# Add alignment
# Add captions
h1 <- htmlTable(tab_diab, cgroup = c("name", "results"), n.cgroup = c(1, 2), 
  align.cgroup = "l", align = c("c", "l", "l"), col.columns = c("grey", 
  "white", "white"), caption = "Table 1. tab_diab", pos.caption = "bottom")
h1
name   results
Variable   Meandiff Meandiff_Pval
1 chol   25.2139817629179 0.002
2 hdl   -5.89295845997974 0.015
3 age   13.7393939393939 < 0.0001
4 height   0.218571280024946 0.69
5 weight   18.1088341037494 0.002
Table 1. tab_diab

Example in Word using ReporteRs

  • Does not work with knitr
  • Creates MS word file
  • Adds objects to file, including formatted tables
# Create table
tabdiabFT <- FlexTable(tab_diab)
# Modify cell properties
tabdiabFT[seq(2, nrow(tab_diab), by = 2), ] <- cellProperties(background.color = "grey")

# Define output filename
doc.filename = "example_table.docx"
# Define docx
doc = docx( )
# Add table
doc = addFlexTable( doc, tabdiabFT )
# Write file
writeDoc( doc, file = doc.filename )