首页 文章

R中制作乳胶台的工具[关闭]

提问于
浏览
270

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

包装:

  • xtable:用于大多数简单对象的标准表 . 一个很好的画廊和例子可以找到here .

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

  • Hmisc包含一个函数 latex() ,它创建一个包含所选对象的tex文件 . 它非常灵活,也可以输出 longtable 乳胶表 . 帮助文件中有很多信息 ?latex

  • miscFuncs有一个简洁的函数'latextable',它将带有混合字母和数字条目的矩阵数据转换为LaTeX表并将它们打印到控制台,因此可以将它们复制并粘贴到LaTeX文档中 .

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

  • reporttools package(JSS paper)是对连续,分类和日期变量进行描述性统计的另一种选择 .

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

  • stargazer包提供了很好的比较统计模型汇总表

博客和代码段

相关问题:

8 回答

  • 6

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

  • 20

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

  • 22

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

    Trick #1: Removing Duplicates in Columns and Trick #2: Using 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包(并且 Headers 中需要\ usepackage

    \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
    @
    
  • 23

    ... and Trick #3 Multiline entries in an 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换行符命令替换列名(包括双反斜杠,这样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仍然放在最后的\中,所以我们最终在表格 Headers 下方留下一个空行 . )

  • 16

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

    乳胶中的书签包装可以制作漂亮的 table . 这是关于如何使用xtable的博客文章create latex tables that use booktabs

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

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

  • 6

    我想补充说一下“brew”包 . 你可以编写一个brew模板文件,它是带有占位符的LaTeX,然后“酿造”它以创建一个.tex文件到\ include或\输入你的LaTeX . 就像是:

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

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

  • 13

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

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

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

  • 6

    taRifx包中的两个实用程序可以协同使用以生成多行嵌套的heirarchies表 .

    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
    

    sample table output

相关问题