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.