[R] 3-way contingency table

David Winsemius dwinsemius at comcast.net
Fri Apr 29 15:51:49 CEST 2011


On Apr 29, 2011, at 6:47 AM, Mathias Walter wrote:

> Hi,
>
> I have large data frame with many columns. A short example is given  
> below:
>
>> dataH
>    host ms01 ms31 ms33 ms34
> 1  cattle    4   20    9    6
> 2   sheep    4    3    4    5
> 3  cattle    4    3    4    5
> 4  cattle    4    3    4    5
> 5   sheep    4    3    5    5
> 6    goat    4    3    4    5
> 7   sheep    4    3    5    5
> 8    goat    4    3    4    5
> 9    goat    4    3    4    5
> 10 cattle    4    3    4    5
>
> Now I want to determine the the frequencies of every unique value in
> every column depending on the host column.
>
> It is quite easy to determine the frequencies in total with the
> following command:
>
>> dataH2 <- dataH[,c(2,3,4,5)]
>> table(as.matrix(dataH2), colnames(dataH2)[col(dataH2)],  
>> useNA="ifany")
>
>    ms01 ms31 ms33 ms34
> 3     0    9    0    0
> 4    10    0    7    0
> 5     0    0    2    9
> 6     0    0    0    1
> 9     0    0    1    0
> 20    0    1    0    0
>
> But I cannot manage to get it dependent on the host.
>
> I tried
>
>> xtabs(cbind(ms01, ms31, ms33, ms34) ~ ., dataH)
>
> and many other ways but I'm not stressful.
>
> I can get it for each column individually with
>
>> with(dataH, table(host, ms33))
>
>       ms33
> host     4 5 9
> cattle 3 0 1
> deer   0 0 0
> goat   3 0 0
> human  0 0 0
> sheep  1 2 0
> tick   0 0 0
>
> But I do not want to repeat the command for every column. I need a
> single table which can be plotted as a balloon plot, for instance.

You have obviously not given us the full data from which your "correct  
answer" was drawn, but see if this is going  the right direction:

require(reshape)
 > dataHm <- melt(dataH)
Using host as id variables
 > xtabs(~host+value+variable, dataHm)
, , variable = ms01

         value
host     3 4 5 6 9 20
   cattle 0 4 0 0 0  0
   goat   0 3 0 0 0  0
   sheep  0 3 0 0 0  0

, , variable = ms31

         value
host     3 4 5 6 9 20
   cattle 3 0 0 0 0  1
   goat   3 0 0 0 0  0
   sheep  3 0 0 0 0  0

, , variable = ms33

         value
host     3 4 5 6 9 20
   cattle 0 3 0 0 1  0
   goat   0 3 0 0 0  0
   sheep  0 1 2 0 0  0

, , variable = ms34

         value
host     3 4 5 6 9 20
   cattle 0 0 3 1 0  0
   goat   0 0 3 0 0  0
   sheep  0 0 3 0 0  0

>
> Does anybody knows how to achieve this?
>
> --
> Kind regards,
> Mathias
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list