I cited the post from this blog:
http://toddjobe.blogspot.com/
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 offactors levels occurs in the dataset. For example, consider a list of plant species whereeach species is assigned a relative seed size (small, medium, or large) and a growthform (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 andgrowth.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 |
没有评论:
发表评论