2012-02-16 63 views
5

我生成了大量的ftable()交叉製表爲一個描述性報告。例如:彩色化/高光值()中knitr輸出/ Sweave rapports

   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 

我尋找能採取ftable()table()輸出從行均值偏離的功能,並且highligh值,或一個整體梯度分配給值的文本,例如從0到100%的數值從紅色變爲綠色。

輸出現在通過knitr進行處理,但我不確定工具鏈中的哪一點可以插入並根據值的相對大小添加顏色。

+0

如果您在這裏沒有得到很好的答覆,您也可以在TeX/LaTeX交換站點上發佈這個問題。 – 2012-02-16 12:47:57

回答

5

可以使用latex功能,在Hmisc包。

# 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") 
+1

1+適用於Hmisc :: latex示例。鑑於我從你的網頁中獲得的有用資料的數量,文森特,我認爲你可以免費通過任何無恥的複製。 – 2012-02-16 20:01:21

2

於從R對象產生膠乳的表,則可以使用xtable包。這是available on CRAN,看看文檔。要獲得表格中的顏色,請使用color乳膠包裝。一些示例代碼:

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

爲了得到你想要的,我做了下面的黑客(醜陋的)。關鍵是要打印xtable對象,比編輯:

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) 

導致:

% 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 

\結束{表格} \結束{中心} \結束{表}

本示例使主要類別中的數字爲粗體,但它可以輕鬆地用於着色。也許別人有更優雅的解決方案?