2012-07-25 72 views
3

我試圖打印出thisxtable(),其中抄錄如下:操縱xtable()輸出

    X   B.1   B.2   B.3 
1  (Intercept) -1.669 (0.093) -1.701 (0.094) -1.774 (0.121) 
2   SEXFemale -0.46 (0.023) -0.386 (0.04) -0.274 (0.17) 
3 SEXFemale:BLACK        0.132 (0.163) 
4 SEXFemale:ASIAN        -0.063 (0.089) 
5 SEXFemale:HISPANIC        -0.128 (0.074) 

但我想重寫印在第一列的方式。是否可以在xtable()或某些其他功能中包含乳膠命令來執行此操作?具體而言,我想的第一列是:

X 
Male: Female 
Female X Black 
     X Asian 
     X Hispanic 

即我想一個\phantom{}開關寫入列,使得間隔出來的權利。

+0

你應該問這對http://tex.stackexchange.com/代替 – Giel 2012-07-25 08:37:31

+0

這是可能的'print.xtable(...,print.results = FALSE)'然後使用正則表達式來查找第二列並插入你的'\ phantom {}'調用。我現在要跑,但我可能會在稍後發佈解決方案。 – 2012-07-25 09:15:07

+0

希望羅馬。提前致謝。 – user702432 2012-07-25 09:17:52

回答

2

您可以使用正則表達式之前插入\phantom{}到表調用xtable()

重建數據:

x <- structure(list(X = structure(c(1L, 2L, 4L, 3L, 5L), .Label = c("(Intercept)", 
                    "SEXFemale", "SEXFemale:ASIAN", "SEXFemale:BLACK", "SEXFemale:HISPANIC" 
), class = "factor"), B.1 = structure(c(3L, 2L, 1L, 1L, 1L), .Label = c("", 
                     "-0.46 (0.023)", "-1.669 (0.093)"), class = "factor"), B.2 = structure(c(3L, 
                                       2L, 1L, 1L, 1L), .Label = c("", "-0.386 (0.04)", "-1.701 (0.094)" 
                                       ), class = "factor"), B.3 = structure(c(4L, 3L, 5L, 1L, 2L), .Label = c("-0.063 (0.089)", 
                                                         "-0.128 (0.074)", "-0.274 (0.17)", "-1.774 (0.121)", "0.132 (0.163)" 
                                       ), class = "factor")), .Names = c("X", "B.1", "B.2", "B.3"), class = "data.frame", row.names = c(NA, 
                                                                -5L)) 

正則表達式:

x$X <- gsub("SEXFemale:", "\\\\phantom{Female} X ", x$X) 
x$X <- gsub("SEXFemale", "Female", x$X) 


library(xtable) 
xx <- print(xtable(x), print.results = FALSE, include.rownames = FALSE, 
     sanitize.text.function=function(x)x) 
cat(xx) 

所得到的文本:

% latex table generated in R 2.15.0 by xtable 1.7-0 package 
% Thu Jul 26 17:10:05 2012 
\begin{table}[ht] 
\begin{center} 
\begin{tabular}{llll} 
    \hline 
X & B.1 & B.2 & B.3 \\ 
    \hline 
(Intercept) & -1.669 (0.093) & -1.701 (0.094) & -1.774 (0.121) \\ 
    Female & -0.46 (0.023) & -0.386 (0.04) & -0.274 (0.17) \\ 
    \phantom{Female} X BLACK & & & 0.132 (0.163) \\ 
    \phantom{Female} X ASIAN & & & -0.063 (0.089) \\ 
    \phantom{Female} X HISPANIC & & & -0.128 (0.074) \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 

以及最終輸出:

+0

這太好了。謝謝,安德里。 – user702432 2012-07-27 05:42:25

0

好的,這裏有一個這樣做的方法。

# dummy example to get ANOVA table 
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14) 
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69) 
group <- gl(2,10,20, labels=c("Ctl","Trt")) 
weight <- c(ctl, trt) 
lm.D9 <- lm(weight ~ group) 

# print xtable into a character 
x <- print(xtable(lm.D9), print.results = FALSE) 

什麼我在這裏做的是找到特定的詞和包裝他們進入\emph{}。你可以做的是將其替換爲特定的文本或包裝在自定義開關中。

x <- sub("(\\(Intercept\\))", "\\\\emph{\\1}", x) 
x <- sub("(groupTrt)", "\\\\emph{\\1}", x) 
cat(x) 

% latex table generated in R 2.15.1 by xtable 1.7-0 package 
% Thu Jul 26 17:41:16 2012 
\begin{table}[ht] 
\begin{center} 
\begin{tabular}{rrrrr} 
    \hline 
& Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ 
    \hline 
\emph{(Intercept)} & 5.0320 & 0.2202 & 22.85 & 0.0000 \\ 
    \emph{groupTrt} & -0.3710 & 0.3114 & -1.19 & 0.2490 \\ 
    \hline 
\end{tabular} 
\end{center} 
\end{table} 

enter image description here