根据一般要求,社区维基在R中生成乳胶表。在这篇文章中,我将概述最常用的包和博客,其中包含用于从不太直接的对象生成乳胶表的代码。请随意添加我错过的任何内容,和/或提供有关如何使用R生成格式良好的乳胶桌的提示,提示和小技巧。
latex()
,它创建一个包含所选对象的tex文件。它非常灵活,也可以输出longtable
乳胶表。帮助文件?latex
答案 0 :(得分:22)
我想补充一下“brew”包的提及。你可以编写一个brew模板文件,它是带有占位符的LaTeX,然后“酿造”它以创建一个.tex文件到\ include或\输入你的LaTeX。类似的东西:
\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}
brew语法也可以处理循环,因此您可以为数据帧的每一行创建一个表行。
答案 1 :(得分:21)
感谢Joris创建此问题。希望它将成为一个社区维基。
乳胶中的booktabs包装产生漂亮的桌子。这是一篇关于如何将xtable用于create latex tables that use booktabs
的博客文章我还会将apsrtable
包添加到混合中,因为它会生成漂亮的回归表。
另一个想法:其中一些软件包(特别是memisc和apsrtable)允许轻松扩展代码以生成不同回归对象的表。一个这样的例子是问题中显示的lme4 memisc代码。启动github存储库来收集这样的代码片段可能是有意义的,并且随着时间的推移甚至可能将它添加到memisc包中。任何人?
答案 2 :(得分:18)
stargazer包是另一个不错的选择。它支持来自许多常用函数和包(lm,glm,svyreg,survival,pscl,AER)以及zelig的对象。除了回归表,它还可以输出数据帧的摘要统计信息,或直接输出数据帧的内容。
答案 3 :(得分:15)
我有一些技巧可以解决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 :(得分:12)
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 :(得分: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 :(得分:5)
您还可以使用R package micsFuncs中的latextable函数:
http://cran.r-project.org/web/packages/miscFuncs/index.html
latextable(M)其中M是具有混合字母和数字条目的矩阵,在屏幕上输出基本的LaTeX表,可以将其复制并粘贴到LaTeX文档中。如果数字很小,它也会用索引表示法替换它们(例如1.2x10 ^ { - 3})。
答案 7 :(得分:5)
用于将多个回归模型聚合到LaTeX表中的另一个R包是texreg。