# Converting R contingency tables to data frames

August 11, 2010
By

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

A contingency table presents the joint density of one or more
categorical variables. Each entry in a contingency table is a count
of the number of times a particular set of factors levels occurs in
the dataset. For example, consider a list of plant species where
each species is assigned a relative seed size (small, medium, or
large) and a growth form (tree, shrub, or herb).

```seed.sizes <- c("small", "medium", "large")
growth.forms <- c("tree", "shrub", "herb")
species.traits <- data.frame(
seed.size = seed.sizes[c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3)],
growth.form = growth.forms[c(3, 3, 2, 2, 1, 2, 2, 3, 1, 1, 1, 1)]
)
```
seed.size growth.form
small herb
small herb
small shrub
small shrub
small tree
medium shrub
medium shrub
medium herb
medium tree
large tree
large tree
large tree

A contingency table will tell us how many times each combination of
seeds.sizes and growth.forms occur.

```tbl <- table(species.traits)
```
herb shrub tree
0 0 3
1 2 1
2 2 1

The output contingency table are of class `table`. The behaviour of
these objects is not quite like a data frame. In fact, trying to
convert them to a data frame gives a non-intuitive result.

```as.data.frame(tbl)
```
seed.size growth.form Freq
large herb 0
medium herb 1
small herb 2
large shrub 0
medium shrub 2
small shrub 2
large tree 3
medium tree 1
small tree 1

Coercion of the table into a data frame puts each factor of the
contingency table into its own column along with the frequency,
rather than keeping the same structure as original `table` object.
If we wanted to turn the table into a data frame keeping the
original structure we use `as.data.frame.matrix`. This function is
not well-documented in R, and this is probably the only situation in
which it would be used. But, it works.

```as.data.frame.matrix(tbl)
```
herb shrub tree
0 0 3
1 2 1
2 2 1

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.