[R] Compiling a contingency table of counts by case

Jacques VESLOT jacques.veslot at good.ibl.fr
Fri Sep 22 11:32:14 CEST 2006


 > dat <- read.delim("clipboard", sep=";")
 > dat <- dat[order(dat$case, dat$name), ]

 > res <- apply(combinations(nlevels(dat$name), 2), 1, function(x) with(dat[dat$name %in% 
levels(dat$name)[x],], table(unlist(sapply(split(x, case), function(y) ifelse(length(y) == 2, 
paste(y, collapse=""), NA))))))

 > names(res) <- apply(combinations(nlevels(dat$name), 2), 1, function(x) paste(levels(dat$name)[x], 
collapse="."))

 > res
$Joe.John

11
  1

$Joe.Karl
character(0)

$Joe.Mike

10 11
  1  1

$Joe.Zoe

11
  2

$John.Karl
character(0)

$John.Mike

10
  1

$John.Zoe

11
  1

$Karl.Mike

01
  1

$Karl.Zoe

00
  1

$Mike.Zoe

01 10 11
  1  1  1

-------------------------------------------------------------------
Jacques VESLOT

CNRS UMR 8090
I.B.L (2ème étage)
1 rue du Professeur Calmette
B.P. 245
59019 Lille Cedex

Tel : 33 (0)3.20.87.10.44
Fax : 33 (0)3.20.87.10.31

http://www-good.ibl.fr
-------------------------------------------------------------------

Serguei Kaniovski a écrit :
> I have asked a similar question before but this time
> the problem is somewhat more involved. I have the
> following data:
> 
> case;name;x
> 1;Joe;1
> 1;Mike;1
> 1;Zoe;1
> 2;Joe;1
> 2;Mike;0
> 2;Zoe;1
> 2;John;1
> 3;Mike;1
> 3;Zoe;0
> 3;Karl;0
> 
> I would like to count the number of "case"
> in which any two "name"
> 
> a. both have "x=1",
> b. the first has "x=0" - the second has "x=1",
> c. the first has "x=1" - the second has "x=0",
> d. both have "x=0",
> 
> The difficulty is that the number of "names" and their
> identity changes from case to case.
> 
> Thanks a lot for you help,
> Serguei Kaniovski



More information about the R-help mailing list