Recover Original Data From Contingency Table
Recreates the data.frame out of a contingency table x.
Untable(x, ...) ## S3 method for class 'data.frame' Untable(x, freq = "Freq", rownames = NULL, ...) ## Default S3 method: Untable(x, dimnames = NULL, type = NULL, rownames = NULL, colnames = NULL, ...)
x |
a numeric vector, a matrix, a table or a data.frame. If x is a vector, a matrix or a table it is interpreted as frequencies which are to be inflated to the original list. |
dimnames |
the dimension names of x to be used for expanding. Can be used to expand a weight vector to its original values. If set to |
type |
defines the data type generated. This allows to directly define factors or ordered factors, but also numeric values. See examples. |
rownames |
A names vector for the rownames of the resulting data.frame. If set to |
colnames |
A names vector for the colnames of the resulting data.frame. If set to |
freq |
character, the name of the frequency variable in case x is a data.frame. |
... |
further arguments passed to or from functions (not used here). |
For x being a vector this reduces to rep(..., n)
with n as vector (which is not supported by rep()
). NA
s in the table will be treated as 0 without raising an error.
a data.frame with the detailed data (even if x was a 1-dimensional table)
Andri Signorell <andri@signorell.net>
expand.grid
, rep
, gl
, xtabs
d.titanic <- Untable(Titanic) str(d.titanic) # ... not the same as: data.frame(Titanic) tab <- table(set1=sample(letters[1:5], size=40, replace=TRUE), set2=sample(letters[11:15], size=40, replace=TRUE)) Untable(tab) # return a numeric vector by setting type and coerce to a vector by [,] Untable(c(6,2,2), type="as.numeric")[,] # how to produce the original list based on frequencies, given as a data.frame d.freq <- data.frame(xtabs(Freq ~ Sex + Survived, data=Titanic)) # a data list with each individual d.data <- Untable( xtabs(c(1364, 126, 367, 344) ~ ., expand.grid(levels(d.freq$Sex),levels(d.freq$Survived)))) head(d.data) # expand a weights vector Untable(c(1,4,5), dimnames=list(c("Zurich","Berlin","London"))) # and the same with a numeric vector Untable(c(1,4,5), dimnames=list(c(5,10,15)), type="as.numeric")[,] # ... which again is nothing else than rep(times=c(1,4,5), x=c(5,10,15)) # the data.frame interface d.freq <- data.frame(f1=c("A","A","B","B"), f2=c("C","D","C","D"), Freq=c(1,2,3,4)) Untable(d.freq)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.