tab1 <- array(1:8, dim=c(2,2,2), dimnames=list("a"=1:2,"b"=1:2,"c"=1:2))
tab2 <- array(1:8, dim=c(2,2,2), dimnames=list("b"=1:2,"c"=1:2,"d"=1:2))
## ## tabMarg ##
## Marginalize down to the bc-array
tabMarg(tab1, 2:3)
tabMarg(tab1, c("b","c"))
tabMarg(tab1, ~b+c)
## This gives an error
## tabMarg(tab1, c(2,5))
## tabMarg(tab1, c("b","w"))
## tabMarg(tab1, ~b+w)
## ## tabPerm ##
tabPerm(tab1, 1:3) ## No change - an abc-table
tabPerm(tab1, c(2,3,1)) ## A bca-table
tabPerm(tab1, ~b+c+a)
## This gives error
## tabPerm(tab1, c(2,1))
## tabPerm(tab1, c(2,1,5))
## tabPerm(tab1, c(2,1,NA))
## ## tabMult etc ##
## Multiply two arrays
out <- tabMult(tab1, tab2)
out <- tabPerm(out, ~a+b+c+d) ## Just for comparison below
ftable(out)
## Alternative approch
df1 <- as.data.frame.table(tab1)
df2 <- as.data.frame.table(tab2)
df3 <- merge(df1, df2, by=c("b","c"))
df3 <- transform(df3, Freq=Freq.x*Freq.y)
tab3 <- xtabs(Freq ~ a+b+c+d, data=df3)
ftable(tab3)
## ## tabExpand ##
tab1.e <- tabExpand(tab1, tab2)
## tab1.e has dimnames b,c,d,a; values are simply replicated for each
## level of d.
dimnames(tab1.e)
ftable(tab1.e, row.vars="d")
## ## tabAlign ##
tab2.e <- tabExpand(tab2, tab1)
names(dimnames(tab2.e))
names(dimnames(tab1.e))
out <- tabAlign(tab1.e, tab2.e)
names(dimnames(out)) ## Same as tab2.e
## ## tabListAdd, tabListMult ##
lst <- list(tab1, tab2)
tabListAdd( lst )
tabListMult( lst )
Run the code above in your browser using DataLab