knitr::opts_chunk$set(comment=NA, fig.align="center", results="markup")
This vignette demonstrates how flattened contingency tables can be combined into more complex tables. For starters, we create a few contingendy tables.
tab.Class.Age <- xtabs(Freq~Class+Age,data=Titanic) tab.Survived.Class.Age <- xtabs(Freq~Survived+Class+Age,data=Titanic) tab.Survived.Class.Sex <- xtabs(Freq~Survived+Class+Sex,data=Titanic) tab.Survived.Class <- xtabs(Freq~Survived+Class,data=Titanic) tab.Survived.Sex <- xtabs(Freq~Survived+Sex,data=Titanic) tab.Survived.Age <- xtabs(Freq~Survived+Age,data=Titanic) tab.Survived <- xtabs(Freq~Survived,data=Titanic)
Then we load the memisc package:
library(memisc)
Next, we create a few flattened contingency tables:
(ftab.Survived.Age <- ftable(tab.Survived.Age)) (ftab.Survived.Sex <- ftable(tab.Survived.Sex))
Since these tables have the same row variables, we can combine them columnwise:
cbind(ftab.Survived.Age,
ftab.Survived.Sex)
We can even add a simple table of counts:
cbind(ftab.Survived.Age, ftab.Survived.Sex, Total=tab.Survived)
Of course, it is not enough to see such tables on screen, we also may need them in a presentable
format, such as LaTeX or HTML. For the latter format we again have format_html
and show_html
.
To see how this works, we first look at the individual ftable
s:
show_html(ftab.Survived.Age)
show_html(ftab.Survived.Sex)
... and then at their combination
show_html( cbind(ftab.Survived.Age, ftab.Survived.Sex, Total=tab.Survived) )
To make, in "knitr", the creation of HTML-versions automatic one can use the following little trick:
knit_print.ftable_matrix <-function(x,options,...) knitr::asis_output( format_html(x, digits=if(length(options$ftable.digits)) options$ftable.digits else 0, ...))
Now we do not need to call show_html
while using "knitr":
cbind(ftab.Survived.Age, ftab.Survived.Sex, Total=tab.Survived)
This can be undone by removing the method function of knit_print
:
rm(knit_print.ftable_matrix)
For show_html
and toLatex
there are some variants in how the
variable names are positioned, for example:
show_html( cbind(ftab.Survived.Age, ftab.Survived.Sex, Total=tab.Survived), varinfront=FALSE )
show_html( cbind(ftab.Survived.Age, ftab.Survived.Sex, Total=tab.Survived), varontop=FALSE )
Of course it is also possible to combine flat contingency tables rowwise:
ftab.Age.Survived <- ftable(tab.Survived.Age,col.vars=1) ftab.Sex.Survived <- ftable(tab.Survived.Sex,col.vars=1) ftab.Class.Survived <- ftable(tab.Survived.Class,col.vars=1) rbind( ftab.Age.Survived, ftab.Sex.Survived, ftab.Class.Survived, Total=tab.Survived )
show_html( rbind( ftab.Age.Survived, ftab.Sex.Survived, ftab.Class.Survived, Total=tab.Survived ) )
It is also possible to create the ftable
s from tables of percentages or generic tables (created
with genTable
) etc.
ptab.Survived.Age<-percentages(Survived~Age,data=Titanic) ptab.Survived.Sex<-percentages(Survived~Sex,data=Titanic) ptab.Survived.Class<-percentages(Survived~Class,data=Titanic) fptab.Age.Survived <- ftable(ptab.Survived.Age,col.vars=1) fptab.Sex.Survived <- ftable(ptab.Survived.Sex,col.vars=1) fptab.Class.Survived <- ftable(ptab.Survived.Class,col.vars=1) show_html( rbind( fptab.Age.Survived, fptab.Sex.Survived, fptab.Class.Survived ), digits=1 )
It is also possible to combine rbind
and cbind
:
tab.Age <- xtabs(Freq~Age,data=Titanic) tab.Sex <- xtabs(Freq~Sex,data=Titanic) tab.Class <- xtabs(Freq~Class,data=Titanic) show_html( rbind( cbind(fptab.Age.Survived,Total=tab.Age), cbind(fptab.Sex.Survived,Total=tab.Sex), cbind(fptab.Class.Survived,Total=tab.Class) ), digits=c(1,0) # One digit after dot for percentages # no digits for total counts. )
The same construct as LaTeX code:
toLatex( rbind( cbind(fptab.Age.Survived,Total=tab.Age), cbind(fptab.Sex.Survived,Total=tab.Sex), cbind(fptab.Class.Survived,Total=tab.Class) ), digits=c(1,0) # One digit after dot for percentages # no digits for total counts. )
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.