提问



根据一般要求,社区维基在R中生成乳胶表。在这篇文章中,我将概述最常用的包和博客,其代码用于从不那么直接的对象生成乳胶表。请随意添加任何我错过了,和/或提供关于如何用R生产格式良好的乳胶表的提示,提示和小技巧


包裹:




  • xtable:用于大多数简单对象的标准表。这里有一个很好的画廊,可以在这里找到。

  • memisc:用于管理调查数据的工具,包含一些用于(基本)回归模型估计的乳胶表的工具。

  • Hmisc包含一个函数latex(),它创建一个包含所选对象的tex文件。它非常灵活,也可以输出longtable乳胶表。帮助文件?latex
  • 中有很多信息
  • miscFuncs有一个简洁的latextable函数,它将带有混合字母和数字条目的矩阵数据转换成LaTeX表并将它们打印到控制台,这样就可以将它们复制并粘贴到LaTeX文档中。

  • texreg包(JSS文件)将统计模型输出转换为LaTeX表。合并多个模型。可以处理大约50种不同的模型类型,包括网络模型和多级模型(lme和lme4)。

  • reporttools包(JSS文件)是关于连续,分类和日期变量的描述性统计的另一种选择。

  • tables package可能是R中用于描述性统计的最常用的LaTeX表制作包

  • stargazer包制作了不错的比较统计模型汇总表



博客和代码段




  • 保罗约翰逊的outreg函数在Latex中给出了类似Stata的表,用于回归的输出。这个很棒。

  • 正如之前的一个问题所示,有一个代码片段可以修改lme4对象的memisc包。



相关问题:




  • 对R/LaTeX表创建包的建议

  • Rreport/LaTeX质量输出包

  • 使用xtable
  • 对乳胶输出表进行排序
  • 从lme4 mer模型拟合对象生成LaTeX表的任何方法吗?

  • 带有xtable
  • 的乳胶输出的堆叠指定标题的R data.frame
  • 使用公式语言
  • ,使用非常灵活且有趣的语法,自动将表格快速添加到R中

最佳参考


我想添加一个brew包。你可以写一个brew模板文件,它是带有占位符的LaTeX,然后酿造它以创建一个.tex文件到\\ include或\\ input到你的LaTeX。类似的东西:[15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [33]


\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}


brew语法也可以处理循环,因此您可以为数据帧的每一行创建一个表行。

其它参考1


感谢Joris创建这个问题。希望它将成为一个社区维基。


乳胶中的书签包装可以制作漂亮的桌子。这是一篇关于如何使用xtable创建使用booktabs [34]的乳胶表的博客文章


我还会将apsrtable包添加到混合中,因为它会生成漂亮的回归表。


另一个想法:其中一些软件包(特别是memisc和apsrtable)允许轻松扩展代码以生成不同回归对象的表。一个这样的例子是问题中显示的lme4 memisc代码。启动github存储库来收集这样的代码片段可能是有意义的,并且随着时间的推移甚至可能将它添加到memisc包中。任何接受者?

其它参考2


观星包是另一个不错的选择。它支持来自许多常用函数和包(lm,glm,svyreg,survival,pscl,AER)以及zelig的对象。除了回归表,它还可以输出数据帧的摘要统计信息,或直接输出数据帧的内容。[35]

其它参考3


我有一些技巧和解决xtable和Latex的有趣功能,我将在这里分享。


技巧#1:删除列中的重复项和技巧#2:使用Booktabs


首先,加载包并定义我的清理功能


<<label=first, include=FALSE, echo=FALSE>>= 
    library(xtable)
    library(plyr)

    cleanf <- function(x){     
        oldx <- c(FALSE, x[-1]==x[-length(x)])  
        # is the value equal to the previous?    
        res <- x
        res[oldx] <- NA
        return(res)} 


现在生成一些假数据


data<-data.frame(animal=sample(c("elephant", "dog", "cat", "fish", "snake"), 100,replace=TRUE),
            colour=sample(c("red", "blue", "green", "yellow"), 100,replace=TRUE),
            size=rnorm(100,mean=500, sd=150),
            age=rlnorm(100, meanlog=3, sdlog=0.5))

    #generate a table
    datatable<-ddply(data, .(animal, colour), function(df) {
                return(data.frame(size=mean(df$size), age=mean(df$age)))
            })


现在我们可以生成一个表,并使用clean函数删除标签列中的重复条目。


cleandata<-datatable
cleandata$animal<-cleanf(cleandata$animal)
cleandata$colour<-cleanf(cleandata$colour)
@ 


这是一个正常的xtable


<<label=normal, results=tex, echo=FALSE>>=
print(
    xtable(
        datatable
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 


这是一个普通的xtable,其中自定义函数将重复项转换为NA


<<label=cleandata, results=tex, echo=FALSE>>=
print(
    xtable(
        cleandata
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 


此表使用booktab包(并且标题中需要\\ usepackage {booktabs})


\begin{table}[!h] 
        \centering
        \caption{table using booktabs.}
        \label{tab:mytable}
<<label=booktabs, echo=F,results=tex>>= 
            mat <- xtable(cleandata,digits=rep(2,ncol(cleandata)+1))
            foo<-0:(length(mat$animal))
            bar<-foo[!is.na(mat$animal)]
            print(mat, 
                  sanitize.text.function = function(x){x},
                  floating=FALSE,
                  include.rownames=FALSE,
                  hline.after=NULL, 
                  add.to.row=list(pos=list(-1,bar,nrow(mat)), 
                  command=c("\\toprule ", "\\midrule ", "\\bottomrule ")))
  #could extend this with \cmidrule to have a partial line over
  #a sub category column and \addlinespace to add space before a total row
@ 

其它参考4


taRifx包中的两个实用程序可以一起使用,以生成嵌套层次结构的多行表。


library(datasets)
library(taRifx)
library(xtable)

test.by <- bytable(ChickWeight$weight, list( ChickWeight$Chick, ChickWeight$Diet) )
colnames(test.by) <- c('Diet','Chick','Mean Weight')
print(latex.table.by(test.by), include.rownames = FALSE, include.colnames = TRUE, sanitize.text.function = force)
#   then add \usepackage{multirow} to the preamble of your LaTeX document
#   for longtable support, add ,tabular.environment='longtable' to the print command (plus add in ,floating=FALSE), then \usepackage{longtable} to the LaTeX preamble




其它参考5


...和Xick中的特技#3多行条目


生成更多数据


moredata<-data.frame(Nominal=c(1:5), n=rep(5,5), 
        MeanLinBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        LinCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""),
        MeanQuadBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        QuadCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""))

names(moredata)<-c("Nominal", "n","Linear Model \nBias","Linear \nCI", "Quadratic Model \nBias", "Quadratic \nCI")


现在生成我们的xtable,使用sanitize函数用正确的Latex换行符命令替换列名(包括双反斜杠,这样R很高兴)


<<label=multilinetable, results=tex, echo=FALSE>>=
foo<-xtable(moredata)
align(foo) <- c( rep('c',3),'p{1.8in}','p{2in}','p{1.8in}','p{2in}' )
print(foo, 
            floating=FALSE, 
            include.rownames=FALSE,
            sanitize.text.function = function(str) {
                str<-gsub("\n","\\\\", str, fixed=TRUE)

                return(str)
            }, 
            sanitize.colnames.function = function(str) {
                str<-c("Nominal", "n","\\centering Linear Model\\\\ \\% Bias","\\centering Linear \\\\ 95\\%CI", "\\centering Quadratic Model\\\\ \\%Bias", "\\centering Quadratic \\\\ 95\\%CI \\tabularnewline")
                return(str)
            })
@  


(虽然这不是完美的,因为我们需要\\ tabularnewline所以表格格式正确,Xtable仍然放在最后的\\,所以我们最终在表格标题下方留下一个空白行。)

其它参考6


您还可以使用R包micsFuncs中的latextable函数:


http://cran.r-project.org/web/packages/miscFuncs/index.html[36]


latextable(M)其中M是具有混合字母和数字条目的矩阵,在屏幕上输出基本LaTeX表,可以将其复制并粘贴到LaTeX文档中。在有小数字的情况下,它也用索引表示法替换它们(例如1.2x10 ^ { - 3})。

其它参考7


用于将多个回归模型聚合到LaTeX表中的另一个R包是texreg。[37]