Question

Je génère beaucoup de ftable() pour les tableaux croisés d'un rapport descriptif. Exemple:

              AUS  BEL  BUL  EST  FRA  GEO  GER  HUN  ITA  NET  NOR  ROM  RUS

30- primary    0.06 0.03 0.07 0.03 0.02 0.03 0.03 0.02 0.05 0.03 0.05 0.04 0.02
    secondary  0.30 0.09 0.16 0.10 0.10 0.14 0.10 0.16 0.11 0.08 0.08 0.09 0.11 
    tertiary   0.05 0.07 0.04 0.05 0.07 0.06 0.02 0.04 0.02 0.05 0.06 0.02 0.09
30+ primary    0.07 0.16 0.12 0.07 0.16 0.03 0.05 0.11 0.35 0.21 0.09 0.17 0.03
    secondary  0.40 0.20 0.30 0.29 0.25 0.35 0.35 0.34 0.27 0.20 0.27 0.34 0.26
    tertiary   0.13 0.23 0.13 0.18 0.17 0.17 0.18 0.09 0.09 0.23 0.23 0.06 0.24
60+ primary    0.00 0.12 0.10 0.13 0.14 0.07 0.05 0.12 0.09 0.11 0.06 0.19 0.12
    secondary  0.00 0.05 0.05 0.08 0.06 0.10 0.14 0.09 0.02 0.04 0.11 0.07 0.06
    tertiary   0.00 0.05 0.03 0.06 0.03 0.04 0.07 0.03 0.01 0.05 0.06 0.02 0.07

Je cherche une fonction qui pourrait prendre la ftable() ou la sortie table(), et les valeurs highligh qui dévient de la ligne de moyenne, ou affecter un gradient global pour le texte des valeurs, par exemple, 0 à 100%, les valeurs sont de couleur du rouge au vert.

La sortie est maintenant traitée par knitr , mais je ne suis pas sûr à quel point dans le toolchain I pourrait intervenir et ajouter de la couleur en fonction de la taille relative des valeurs.

Était-ce utile?

La solution

You can use the latex function, in the Hmisc package.

# Example shamelessly copied from http://www.karlin.mff.cuni.cz/~kulich/vyuka/Rdoc/harrell-R-latex.pdf
cat('
  \\documentclass{article}
  \\usepackage[table]{xcolor}
  \\begin{document}
  <<results=tex>>=
  library(Hmisc)
  d <- head(iris)
  cellTex <- matrix(rep("", nrow(d) * ncol(d)), nrow=nrow(d))
  cellTex[2,2] <- "cellcolor{red}"
  cellTex[2,3] <- "color{red}"
  cellTex[5,1] <- "rowcolor{yellow}"
  latex(d, file = "", cellTexCmds = cellTex, rowname=NULL)
  @
  \\end{document}',
  file="tmp.Rnw" )
Sweave("tmp.Rnw")
library(utils)
texi2pdf("tmp.tex")

Autres conseils

To generate latex tables from R objects, you can use the xtable package. It is available on CRAN, take a look at the documentation. To get the color in the table, use the color latex package. Some example code:

library(xtable)
n = 100
cat_country = c("NL","BE","HU")
cat_prim = c("primary","secondary","tertiary")
dat = data.frame(country = sample(cat_country, n, replace = TRUE), 
                 prim = sample(cat_prim, n, replace = TRUE))
ftable_dat = ftable(dat)

## Make latex table:
latex_table = xtable(as.table(ftable_dat))

To get what you want I made the following hack (ugly one). The trick is to print the xtable object and than edit that:

latex_table = within(latex_table, {
#   browser()
  primary = ifelse(primary > 12, sprintf("\\textbf{%s}", primary), primary)
  #primary = sub("\\{", "{", primary)
})
printed_table = print(latex_table)
printed_table = sub("backslash", "\\", printed_table)
printed_table = sub("\\\\}", "}", printed_table)
printed_table = sub("\\\\\\{", "{", printed_table)
printed_table = sub("\\$", "\\", printed_table)
printed_table = sub("\\$", "\\", printed_table)
cat(printed_table)

Which leads to:

% latex table generated in R 2.14.1 by xtable 1.6-0 package
% Thu Feb 16 13:10:55 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrrr}
  \hline
 & primary & secondary & tertiary \\ 
  \hline
BE & 10 &   5 &  11 \\ 
  HU & \textbf{13} &  13 &   8 \\ 
  NL & 11 &  17 &  12 \\ 
   \hline

\end{tabular}     \end{center}     \end{table}

This example makes a number in the primary category bold, but it can work for colorization just as easily. Maybe someone else has a more elegant solution?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top