用R制作乳胶桌子的工具
在一般的要求,一个社区维基生产乳胶表在R.在这篇文章中,我会给大概最常用的软件包和博客与代码从较不直接的对象生产乳胶表。 请随时添加任何我错过的,和/或提供技巧,提示和一些小技巧,如何生产与R好格式乳胶表。
软件包:
- xtable :用于最简单对象的标准表。 一个不错的画廊与例子可以在这里find。
- memisc :用于pipe理调查数据的工具,包含用于(基本)回归模型估计的乳胶表格的一些工具。
- Hmisc包含一个函数
latex()
,它创build一个包含所选对象的tex文件。 这是非常灵活的,也可以输出longtable
乳胶表。 帮助文件中有很多信息?latex
- miscFuncs有一个简洁的函数“latextable”,它将混合字母和数字条目的matrix数据转换成LaTeX表格,并将它们打印到控制台,以便将它们复制并粘贴到LaTeX文档中。
- texreg包( JSS文件 )将统计模型输出转换成LaTeX表。 合并多个模型。 可以处理大约50种不同的模型types,包括networking模型和多级模型(lme和lme4)。
- reporttools包( JSS文件 )是连续,分类和datevariables描述统计的另一种select。
- 表格包也许是R中用于描述性统计的最通用的LaTeX表格包
- stargazer软件包做出了很好的比较统计模型汇总表
博客和代码片段
- 保罗·约翰逊(Paul Johnson )的outreg函数给出了Latex中Stata类的表格,用于回归的输出。 这个很好。
- 正如在前面的问题中给出的,有一个代码片段来调整lme4对象的memisc包 。
相关问题:
- 对R / LaTeX表创build包的build议
- Rreport / LaTeX质量输出包
- 用xtablesorting乳胶输出表
- 任何方式来生成一个LME4模型适合对象LaTeX表?
- R data.frame与xtable胶乳输出的堆叠指定标题
- 使用公式语言自动将表格快速添加到R的胶乳中 ,并使用非常灵活和有趣的语法
我想添加一个“brew”包。 你可以编写一个brew模板文件,这个文件将会是带有占位符的LaTeX,然后“酿造”它来创build一个.tex文件,将其包含或者input到你的LaTeX中。 就像是:
\begin{tabular}{ll} A & <%= fit$A %> \\ B & <%= fit$B %> \\ \end{tabular}
brew语法也可以处理循环,所以您可以为dataframe的每一行创build一个表格行。
感谢Joris创造这个问题。 希望它会成为一个社区维基。
在乳胶书签包产生漂亮的表。 这里是一篇关于如何使用xtable 创build使用booktabs的乳胶表的博客文章
我也会添加apsrtable
包,因为它产生好看的回归表。
另一个想法:这些包中的一些(特别是memisc和apsrtable)允许代码的简单扩展,为不同的回归对象生成表格。 一个这样的例子是问题中显示的lme4 memisc代码。 启动一个github仓库来收集这样的代码片段可能是有意义的,随着时间的推移,甚至可能将其添加到memisc包。 任何接受者?
stargazer包是另一个不错的select。 它支持许多常用函数和包(lm,glm,svyreg,survival,pscl,AER)以及zelig中的对象。 除了回归表之外,还可以输出dataframe的汇总统计,也可以直接输出dataframe的内容。
我有一些技巧,并解决xtable和Latex的有趣的'function',我将在这里分享。
伎俩#1:删除重复列和诀窍#2:使用书签
首先,加载包并定义我的清理function
<<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 @
包中的两个工具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
…和特技#3 Xtable中的多行条目
生成更多的数据
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 newline命令replace列名(包括双反斜杠,所以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) }) @
(尽pipe这并不完美,因为我们需要\ tabularnewline,所以表格格式正确,Xtable仍然放在最后\,所以我们最终在表头下面有一个空行)。
您也可以使用R包micsFuncs中的latextable函数:
http://cran.r-project.org/web/packages/miscFuncs/index.html
latextable(M)其中M是具有混合字母和数字条目的matrix,将基本的LaTeX表格输出到屏幕上,可将其复制并粘贴到LaTeX文档中。 在数字较小的地方,也用索引符号(例如1.2×10 ^ { – 3})replace。
用于将多个回归模型聚合到LaTeX表中的另一个R包是texreg 。