Untable {DescTools}R Documentation

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, ...)



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).


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.


defines the data type generated. This allows to directly define factors or ordered factors, but also numeric values. See examples.


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.


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.


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()). NAs 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>

See Also

expand.grid, rep, gl, xtabs


d.titanic <- Untable(Titanic)

# ... not the same as:

tab <- table(set1=sample(letters[1:5], size=40, replace=TRUE), 
             set2=sample(letters[11:15], size=40, replace=TRUE))

# 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 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))

[Package DescTools version 0.99.51 Index]