Strumenti per creare tabelle in lattice in R [chiuso]


268

Su richiesta generale, una wiki della comunità sulla produzione di tabelle in lattice in R. In questo post fornirò una panoramica dei pacchetti e blog più comunemente usati con codice per la produzione di tabelle in lattice da oggetti meno semplici. Sentiti libero di aggiungere qualsiasi cosa mi sia sfuggita e / o dare consigli, suggerimenti e piccoli trucchi su come produrre tabelle in lattice ben formattate con R.

Pacchi :

  • xtable : per le tabelle standard della maggior parte degli oggetti semplici. Una bella galleria con esempi può essere trovata qui .
  • memisc : strumento per la gestione dei dati dell'indagine, contiene alcuni strumenti per le tabelle in lattice delle stime del modello di regressione (di base).
  • Hmisc contiene una funzione latex()che crea un file tex contenente l'oggetto scelto. È piuttosto flessibile e può anche produrre longtabletabelle in lattice. Ci sono molte informazioni nel file di aiuto?latex
  • miscFuncs ha una funzione ordinata 'latextable' che converte i dati della matrice con voci alfabetiche e numeriche miste in una tabella LaTeX e le stampa sulla console, in modo che possano essere copiate e incollate in un documento LaTeX.
  • pacchetto texreg ( JSS paper ) converte l'output del modello statistico in tabelle LaTeX. Unisce più modelli. Può far fronte a circa 50 diversi tipi di modelli, inclusi modelli di rete e modelli multilivello (lme e lme4).
  • Il pacchetto reporttools ( documento JSS ) è un'altra opzione per statistiche descrittive su variabili continue, categoriche e di data.
  • Il pacchetto tables è forse il pacchetto di creazione di tabelle LaTeX più generale in R per le statistiche descrittive
  • Il pacchetto stargazer rende piacevoli le tabelle di riepilogo del modello statistico comparativo

Blog e frammenti di codice

Domande correlate :


4
Su Cross Validated (stats.SE), il seguente post sul blog sarà di interesse per i lettori qui: Alcune note su come creare tabelle efficaci .
gung - Ripristina Monica il

2
Puoi anche usare ztable. Crea facilmente tabelle zebrate nei formati LaTeX e HTML. È abbastanza flessibile e semplice: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
skan

Qual è la "procedura" suggerita per lavorare con molte tabelle in R (o RStudio) e usarle da un programma Latex esterno, come TexStudio, per incorporarle in un progetto molto più ampio?
skan

1
@skan Questo è specifico per il lattice. Se si creano documenti "figli", li si crea come documenti in lattice e si utilizza includeo input. Puoi usare ciò writeLines()che funziona con entrambi kable()e xtable(). Memorizza come file .tex e risolto il problema.
Joris Meys,

1
OTOH, se usi più documenti e vuoi combinarli in uno (non sei chiaro su quello), crei i documenti e li usi inputper ottenere un documento negli altri. Il manuale del lattice ti dirà che è lo stesso che digitare il contenuto del documento in quel posto, quindi non è necessario copiare e incollare l'intero setup che hai fatto nel preambolo.
Joris Meys,

Risposte:


22

Vorrei aggiungere una menzione del pacchetto "brew". È possibile scrivere un file modello brew che sarebbe LaTeX con segnaposto e quindi "preparare" per creare un file .tex da includere / inserire in LaTeX. Qualcosa di simile a:

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

La sintassi brew può anche gestire i loop, quindi puoi creare una riga di tabella per ogni riga di un frame di dati.


Il pacchetto R.rsp e la sua funzione rstring () è simile a brew :: brew (). Non sono sicuro che sia meglio, ma il pacchetto ha sicuramente più roba. In entrambi i casi mi piace questo approccio poiché offre maggiore flessibilità nel codice tex senza sacrificare la riproducibilità.
Richard DiSalvo,

21

Grazie Joris per aver creato questa domanda. Eventualmente, sarà trasformato in un wiki della comunità.

I pacchetti di libri in lattice producono tavoli dall'aspetto gradevole. Ecco un post sul blog su come usare xtable per creare tabelle in lattice che usano i booktabs

Vorrei anche aggiungere il apsrtablepacchetto al mix in quanto produce tabelle di regressione dall'aspetto gradevole.

Un'altra idea: alcuni di questi pacchetti (specialmente memisc e apsrtable) consentono facili estensioni del codice per produrre tabelle per diversi oggetti di regressione. Uno di questi esempi è il codice memisc di lme4 mostrato nella domanda. Potrebbe avere senso avviare un repository github per raccogliere tali frammenti di codice e nel tempo potrebbe anche aggiungerlo al pacchetto memisc. Qualche acquirente?


18

Il pacchetto stargazer è un'altra buona opzione. Supporta oggetti di molte funzioni e pacchetti di uso comune (lm, glm, svyreg, survival, pscl, AER), nonché di zelig. Oltre alle tabelle di regressione, può anche generare statistiche di riepilogo per i frame di dati o direttamente il contenuto dei frame di dati.


15

Ho alcuni trucchi e soluzioni a interessanti "caratteristiche" di xtable e Latex che condividerò qui.

Trucco n. 1: Rimozione dei duplicati nelle colonne e Trucco n. 2: Utilizzo di Booktabs

Innanzitutto, carica i pacchetti e definisci la mia funzione pulita

<<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)} 

Ora genera alcuni dati falsi

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)))
            })

Ora possiamo generare una tabella e utilizzare la funzione clean per rimuovere voci duplicate nelle colonne dell'etichetta.

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

questa è una normale xtable

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

questo è un normale xtable in cui una funzione personalizzata ha trasformato i duplicati in NA

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

Questa tabella utilizza il pacchetto booktab (e ha bisogno di un \ usepackage {booktabs} nelle intestazioni)

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

12

Due utility nel pacchetto taRifx possono essere usate in concerto per produrre tabelle multi-fila di gerarchie nidificate.

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

output della tabella di esempio


2
C'è un modo per fare una cosa simile ma con un intero frame di dati invece di un solo vettore come viene immesso con bytable ()?
Thraupidae,

5

... e Trick # 3 voci multilinea in una Xtable

Genera altri dati

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")

Ora produciamo il nostro xtable, usando la funzione sanitize per sostituire i nomi delle colonne con i comandi newline Latex corretti (inclusi doppi backslash quindi R è contento)

<<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)
            })
@  

(anche se questo non è perfetto, poiché abbiamo bisogno di \ tabularnewline in modo che la tabella sia formattata correttamente e Xtable inserisca ancora un \ finale, quindi finiamo con una riga vuota sotto l'intestazione della tabella.)


5

Puoi anche usare la funzione latextable dal pacchetto R micsFuncs:

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

latextable (M) dove M è una matrice con voci alfabetiche e numeriche miste genera sullo schermo una tabella LaTeX di base, che può essere copiata e incollata in un documento LaTeX. Dove ci sono piccoli numeri, li sostituisce anche con la notazione dell'indice (ad es. 1,2x10 ^ {- 3}).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.