Percentage Table
Prints a 2-way contingency table along with percentages, marginal, and conditional distributions. All the frequencies are nested into one single table.
## Default S3 method: PercTable(x, y = NULL, ...) ## S3 method for class 'table' PercTable(tab, row.vars = NULL, col.vars = NULL, justify = "right", freq = TRUE, rfrq = "100", expected = FALSE, residuals = FALSE, stdres = FALSE, margins = NULL, digits = NULL, ...) ## S3 method for class 'formula' PercTable(formula, data, subset, na.action, ...) ## S3 method for class 'PercTable' print(x, vsep = NULL, ...) Margins(tab, ...)
x, y |
objects which can be interpreted as factors (including character strings).
x and y will be tabulated via |
tab |
a r x c-contingency table |
row.vars |
a vector of row variables (see Details). |
col.vars |
a vector of column variables (see Details). If this is left to |
justify |
either |
freq |
boolean. Should absolute frequencies be included? Defaults to TRUE. |
rfrq |
a string with 3 characters, each of them being 1 or 0. The first position means total percentages, the second means row percentages and the third column percentages. "011" produces a table output with row and column percentages. |
expected |
the expected counts under the null hypothesis. |
residuals |
the Pearson residuals, (observed - expected) / sqrt(expected). |
stdres |
standardized residuals, (observed - expected) / sqrt(V), where V is the residual cell variance (for the case where x is a matrix, n * p * (1 - p) otherwise). |
margins |
a vector, consisting out of 1 and/or 2. Defines the margin sums to be included.
1 stands for row margins, 2 for column margins, c(1,2) for both. Default is |
digits |
integer. With how many digits shoud the relative frequencies be formatted? Default can be set by |
formula |
a formula of the form |
data |
an optional matrix or data frame (or similar: see |
subset |
an optional vector specifying a subset of observations to be used. |
na.action |
a function which indicates what should happen when the data contain NAs. Defaults to |
vsep |
logical, defining if an empty row should be introduced between the table rows. Default is FALSE, if only a table with one single description (either frequencies or percents) should be returned and |
... |
the dots are passed from |
PercTable prints a 2-dimensional table. The absolute and relative frequencies are nested into one flat table by means of ftable
.
row.vars
, resp. col.vars
can be used to define the structure of the table. row.vars
can either be the names of
the dimensions (included percentages are named "idx"
) or numbers (1:3, where 1 is the first dimension of the table,
2 the second and 3 the percentages).
Use Sort()
if you want to have your table sorted by rows.
The style in which numbers are formatted is selected by
Fmt()
from the DescTools options.
Absolute frequencies will use Fmt("abs")
and Fmt("per")
will do it for the percentages. The options can be changed with Fmt(abs=as.fmt(...))
which is basically a "fmt"
-object containing any format information used in Format
.
Margins()
returns a list containing all the one dimensional margin tables of a n-dimensional table along the given dimensions. It uses margin.table()
for all the dimensions and adds the appropriate percentages.
Returns an object of class "ftable"
.
Andri Signorell <andri@signorell.net>
Agresti, Alan (2007) Introduction to categorical data analysis. NY: John Wiley and Sons, Section 2.4.5
Freq
, table
, ftable
, prop.table
, addmargins
, DescToolsOptions
, Fmt
There are similar functions in package sfsmisc printTable2
and package vcd table2d_summary
, both
lacking some of the flexibility we needed here.
tab <- table(driver=d.pizza$driver, area=d.pizza$area) PercTable(tab=tab, col.vars=2) PercTable(tab=tab, col.vars=2, margins=c(1,2)) PercTable(tab=tab, col.vars=2, margins=2) PercTable(tab=tab, col.vars=2, margins=1) PercTable(tab=tab, col.vars=2, margins=NULL) PercTable(tab=tab, col.vars=2, rfrq="000") # just the percentages without absolute values PercTable(tab=tab, col.vars=2, rfrq="110", freq=FALSE) # just the row percentages in percent format (pfmt = TRUE) PercTable(tab, freq= FALSE, rfrq="010", pfmt=TRUE, digits=1) # just the expected frequencies and the standard residuals PercTable(tab=tab, rfrq="000", expected = TRUE, stdres = TRUE) # rearrange output such that freq are inserted as columns instead of rows PercTable(tab=tab, col.vars=c(3,2), rfrq="111") # putting the areas in rows PercTable(tab=tab, col.vars=c(3,1), rfrq="100", margins=c(1,2)) # formula interface with subset PercTable(driver ~ area, data=d.pizza, subset=wine_delivered==0) # sort the table by rows, order first column (Zurich), then third, then row.names (0) PercTable(tab=Sort(tab, ord=c(1,3,0))) # reverse the row variables, so that absolute frequencies and percents # are not nested together PercTable(tab, row.vars=c(3, 1)) # the vector interface PercTable(x=d.pizza$driver, y=d.pizza$area) PercTable(x=d.pizza$driver, y=d.pizza$area, margins=c(1,2), rfrq="000", useNA="ifany") # one dimensional x falls back to the function Freq() PercTable(x=d.pizza$driver) # the margin tables Margins(Titanic)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.