2011-11-26 21 views
8

Tengo algunos problemas para conseguir la alineación para trabajar en mi mesa de látex, he aquí un ejemplo:Como llegar mesa de látex del látex() en Hmisc para alinear columnas

library(Hmisc) 
set.seed(1) 
x <- matrix(round(runif(6*3)*10, 2), ncol=6) 
x[1, 2] <- -round(x[1, 2], 0) 
x[3, 3] <- -round(x[1, 2], 1) 
x[3, 5] <- round(x[1, 2], 1) 

ci1 <- apply(x[,2:3], 1, FUN=function(x){ 
     ret <- paste(min(x), "-", max(x)) 
     return(ret) 
}) 
ci2 <- apply(x[,5:6], 1, FUN=function(x){ 
     ret <- paste(min(x), "-", max(x)) 
     return(ret) 
}) 

x <- cbind(x[,1], ci1, x[,4], ci2) 
colnames(x) <- c("A", "interval", "B", "interval") 
rownames(x) <- sapply(letters[1:3], FUN=function(x){ return(paste("Var_", x, sep=""))}) 

latex(x, file="", align="rcrc", rowlabel.just="r", 
     cgroup = c("First", "Second"), 
     n.cgroup = c(2, 2), 
     rgroup=c("Grup A and B", "Group C"), 
     n.rgroup=c(2, NROW(x) - 2), 
     ctable=T) 

Esto produce:

% latex.default(x, file = "", align = "rcrc", rowlabel.just = "r",  cgroup = c("First", "Second"), n.cgroup = c(2, 2), rgroup = c("Grup A and B",   "Group C"), n.rgroup = c(2, NROW(x) - 2), ctable = T) 
% 
\ctable[ label=x, pos=!tbp, ]{rllcll} {} {\FL\multicolumn{1}{c}{\bfseries x}& 
\multicolumn{2}{c}{\bfseries First}& 
\multicolumn{1}{c}{\bfseries }& 
\multicolumn{2}{c}{\bfseries Second} 
\NN \cline{2-3} \cline{5-6} 
\multicolumn{1}{r}{}&\multicolumn{1}{c}{A}&\multicolumn{1}{c}{interval}&\multicolumn{1}{c}{}&\multicolumn{1}{c}{B}&\multicolumn{1}{c}{interval}\NN 
\ML 
{\bfseries Grup A and B}&&&&&\NN 
Var_a&2.66&-9 - 9.45&&0.62&4.98 - 6.87\NN 
Var_b&3.72&2.02 - 6.61&&2.06&3.84 - 7.18\NN 
\ML 
{\bfseries Group C}&&&&&\NN 
Var_c&5.73&8.98 - 9&&1.77&-9 - 9.92\NN 
\LL 
} 

El error está aquí:

\ctable[ label=x, pos=!tbp, ]{rllcll} 

quiero rllcll ser rrccrc pero no hace eso. He intentado todas las alternativas posibles para el parámetro aling y halign. Es un poco molesto estar haciendo esto a mano ...

Respuesta

12

Aquí está la manera de hacerlo. Los principales cambios al código es usar col.just = c('r', 'c', 'r', 'c') en lugar de align. Además, los nombres de sus filas tienen caracteres de subrayado, lo que provocará que latex arroje un error. Así que utilice latexTranslate para escapar de sus guiones y prevenir errores

latex(x, file="", col.just = strsplit("rcrc", "")[[1]], rowlabel.just="r", 
    cgroup = c("First", "Second"), n.cgroup = c(2, 2), 
    rgroup = c("Grup A and B", "Group C"), n.rgroup=c(2, NROW(x) - 2), 
    booktabs = T, rowname = latexTranslate(rownames(x))) 

enter image description here

+0

Tenga en cuenta que los números no tienen el formato correcto. –

+0

he pegado el código incorrecto (de hecho, el original utilizado por el OP. Lo he corregido ahora. El código del látex muestra '\ begin {tabular} {rrccrc}' – Ramnath

+0

El formateo de los números sigue siendo incorrecto. Nota por ejemplo el signo menos incorrecto y el espaciado. También estoy bastante seguro de que la "x" (y posiblemente los nombres de los grupos) deberían formatearse como nombres de variables. –