Learn R Programming

DescTools (version 0.99.19)

Untable: Recover Original Data From Contingency Table

Description

Recreates the data.frame out of a contingency table x.

Usage

Untable(x, ...)
"Untable"(x, freq = "Freq", rownames = NULL, ...) "Untable"(x, dimnames = NULL, type = NULL, rownames = NULL, colnames = NULL, ...)

Arguments

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. If x is a data.frame it is interpreted as a table in frequency form (containing one or more factors and a frequency variable).

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 NULL (default) the dimnames of x will be used.
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 NULL (default) the names will be defined according to the table's dimnames.
colnames
A names vector for the colnames of the resulting data.frame. If set to NULL (default) the names will be defined according to the table's dimnames.
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).

Value

(even if x was a 1-dimensional table)

Details

For x being a vector this reduces to rep(..., n) with n as vector (which is not supported by rep).

See Also

expand.grid, rep, gl, xtabs

Examples

Run this code
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)

Run the code above in your browser using DataLab