xtable for conditional cell formatting significant p-values of table
conditional-statements, formatting, latex, r, xtable
Solution
Hello try this :
\documentclass{article}
\usepackage{color}
\begin{document}
<<echo=FALSE, results='asis'>>=
df = data.frame(V1 = LETTERS[1:6], V2 = runif(6, 0, 1))
df$V3 = ifelse(df$V2 < 0.5, paste0("\\colorbox{red}{", df$V2, "}"), df$V2)
library(xtable)
print(xtable(df), sanitize.text.function = function(x) x)
@
\end{document}
EDIT
If you have multiple conditions, one solution is to use package `dplyr` and function `case_when` :
set.seed(123)
df <- data.frame(V1 = LETTERS[1:6], V2 = runif(6, 0, 1))
library("dplyr")
df %>%
mutate(
V3 = case_when(
V2 < 0.5 ~ paste0("\\colorbox{red}{", round(V2, 3), "}"),
V2 >= 0.5 & V2 < 0.8 ~ paste0("\\colorbox{blue}{", round(V2, 3), "}"),
TRUE ~ formatC(V2, digits = 3)
)
)
# V1 V2 V3
# 1 A 0.2875775 \\colorbox{red}{0.288}
# 2 B 0.7883051 \\colorbox{blue}{0.788}
# 3 C 0.4089769 \\colorbox{red}{0.409}
# 4 D 0.8830174 0.883
# 5 E 0.9404673 0.94
# 6 F 0.0455565 \\colorbox{red}{0.046}
Problem
I'm using xtable to generate tables to put in Latex, and was wondering if there's a way to have conditional formatting of cells so that all significant p-values are in grey? I'm using Knitr in TexShop. Here's an example using the `diamonds` data in ggplot2, and running a TukeyHSD test to predict `carat` from `cut`. ``` library(ggplot2) library(xtable) summary(data.aov <- aov(carat~cut, data = diamonds)) data.hsd<-TukeyHSD(data.aov) data.hsd.result<-data.frame(data.hsd$cut) data.hsd.result ``` I can then get `data.hsd.result` into xtable format with: ``` xtable(data.hsd.result) ``` In Latex, the output looks like this: ``` diff lwr upr p.adj Good-Fair -0.19695197 -0.23342631 -0.16047764 0.000000e+00 Very Good-Fair -0.23975525 -0.27344709 -0.20606342 0.000000e+00 Premium-Fair -0.15418175 -0.18762721 -0.12073628 0.000000e+00 Ideal-Fair -0.34329965 -0.37610961 -0.31048970 0.000000e+00 Very Good-Good -0.04280328 -0.06430194 -0.02130461 5.585171e-07 Premium-Good 0.04277023 0.02165976 0.06388070 3.256208e-07 Ideal-Good -0.14634768 -0.16643613 -0.12625923 0.000000e+00 Premium-Very Good 0.08557350 0.06974902 0.10139799 0.000000e+00 Ideal-Very Good -0.10354440 -0.11797729 -0.08911151 0.000000e+00 Ideal-Premium -0.18911791 -0.20296592 -0.17526989 0.000000e+00 ``` It it possible to have any p-values < 0.05 to have a grey coloured background automatically or highlighted in some way? Obviously, for this set it would be the whole column, but I'm hoping for something that works with all my data.