首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作xtable()输出

操作xtable()输出
EN

Stack Overflow用户
提问于 2012-07-25 15:23:09
回答 2查看 870关注 0票数 3

我正在尝试用xtable()打印this表,转载如下:

代码语言:javascript
复制
                   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()中包含latex命令或其他函数来实现此目的?具体地说,我希望第一列是:

代码语言:javascript
复制
    X
Male: Female
Female X Black
       X Asian
       X Hispanic

也就是说,我想在列中写入一个\phantom{}开关,这样空格就可以出来了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-27 00:13:10

在调用xtable()之前,可以使用正则表达式将\phantom{}插入到表

重新创建数据:

代码语言:javascript
复制
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))

正则表达式:

代码语言:javascript
复制
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)

生成的文本:

代码语言:javascript
复制
% 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}

最后的输出是:

票数 2
EN

Stack Overflow用户

发布于 2012-07-26 23:47:39

好的,这里有一种方法。

代码语言:javascript
复制
# 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{}中。您可以将其替换为特定的文本或在您的自定义开关中换行。

代码语言:javascript
复制
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}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11644617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档