crosstable: Formating and Printing a Cross Tabulation

View source: R/crosstable.R

crosstableR Documentation

Formating and Printing a Cross Tabulation

Description

Create a contingency table or crosstabulation with two or more dimensions with easy to read summary statistics like row or column percent.

Usage

crosstable(
  ...,
  data = parent.frame(),
  row.vars = NULL,
  col.vars = NULL,
  stats = "count",
  format = NULL,
  stats.on.cols = TRUE
)

Arguments

...

Can be a group of factors, a formula or a regular table. All arguments will be passed to table or xtabs.

data

An optional matrix or data frame if a formula is used to introduce the variables.

row.vars

A number or character vector giving the names of the variabbles to be used for the rows.

col.vars

A number or character vector giving the names of the variabbles to be used for the columns.

stats

Character vector of count or percentages to compute c("count", "row", "column", "total")

format

Character vector with the format of the stats. See help("%f%")

stats.on.cols

Logical. ¿should be the stats on cols? TRUE by default.

Value

Acontingency table of class "crosstable". It can be used in the same way that a regular table, but with a different method to print it.

Examples

# Generate random data
gender <- sample(c(1,2), 131, replace=TRUE)
gender <- factor(gender, levels=c(1,2), labels=c("Man", "Woman"))
strata <- sample(c(1,2,3), 131, replace=TRUE)
strata <- factor(strata, levels=c(1,2,3), labels=c("Low", "Middle", "High"))
party <- sample(c(1,2), 131, replace=TRUE)
party <- factor(party, levels=c(1,2), labels=c("Right", "Left"))

# Standar two variable table
# Normal table
crosstable(gender, party)
# add column percent
crosstable(gender, party, stats=c("count", "column"))
# the same with stats on rows
crosstable(gender, party, stats=c("count", "column"), stats.on.cols=FALSE)
# add all percents
crosstable(gender, party, stats=c("count", "column", "row", "total"))

# If you want to add custom stat columns like chisq expected values,
# you can use add.tables()
# First store the table in a object
gxp <- crosstable(gender, party, stats=c("count", "column"))
# Perform Chi square test
gxp_xsq <- chisq.test(gxp)
# Add the Chisq expected values to the table
gxp <- add.tables(gxp, "expected" = gxp_xsq$expected)

print(gxp)

# More than two variable table
crosstable(gender, strata, party, stats=c("count", "column", "row", "total"))

# Use an existing table like Titanic
crosstable(Titanic, stats=c("count", "column"))
# You can arrange freely the col and row vars.
crosstable(Titanic, col.vars=c("Sex", "Survived"), stats=c("count", "column"))

# Using a data.frame
cars <- MASS::Cars93
with(cars, crosstable(Type, Origin, Man.trans.avail, col.vars=c("Origin", "Man.trans.avail")))

# The same with a Formula Method
crosstable(~Type+Origin+Man.trans.avail , data=cars, col.vars=c("Origin", "Man.trans.avail"))


andresnecochea/multitabulation documentation built on June 15, 2022, 5:55 a.m.