[R] Crosstab with Average and Count
David L Carlson
dcarlson at tamu.edu
Fri Jul 20 15:53:36 CEST 2012
There are lots of possibilities. Here's one using only xtabs():
dframe <- na.omit(data.frame(x, y, z))
zsum <- xtabs(z~x+y, dframe)
zcount <- xtabs(~x+y, dframe)
zmean <- ifelse(is.nan(zsum/zcount), 0, zsum/zcount)
----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Marc Schwartz
> Sent: Friday, July 20, 2012 8:41 AM
> To: vioravis
> Cc: r-help at r-project.org
> Subject: Re: [R] Crosstab with Average and Count
>
> On Jul 20, 2012, at 5:30 AM, vioravis wrote:
>
> > I have the following data:
> >
> > x <- as.factor(c(1,1,1,2,2,2,3,3,3))
> > y <- as.factor(c(10,10,10,20,20,20,30,30,30))
> > z <- c(100,100,NA,200,200,200,300,300,300)
> >
> > I could create the cross tab of x and y with Sum of z as its elements
> using
> > the xtabs function as follows:
> >
> > # X Vs. Y with Sum Z
> >
> > xtabs(z ~ x + y)
> >
> > y
> > x 10 20 30
> > 1 200 0 0
> > 2 0 600 0
> > 3 0 0 900
> >
> > How do I replace the sum with average and count so that I can get the
> > following outputs??
> >
> > # X Vs. Y with Average of Z
> > y
> > x 10 20 30
> > 1 100 0 0
> > 2 0 200 0
> > 3 0 0 300
> >
> > # X Vs. Y with Count Z
> > y
> > x 10 20 30
> > 1 2 0 0
> > 2 0 3 0
> > 3 0 0 3
> >
> > Would appreciate any help on these? Thank you.
> >
> > Ravi
>
>
> You can use ?tapply, albeit you will get NA's rather than 0's:
>
> > tapply(z, list(x, y), mean, na.rm = TRUE)
> 10 20 30
> 1 100 NA NA
> 2 NA 200 NA
> 3 NA NA 300
>
>
> > tapply(z, list(x, y), function(x) sum(!is.na(x)))
> 10 20 30
> 1 2 NA NA
> 2 NA 3 NA
> 3 NA NA 3
>
>
> Regards,
>
> Marc Schwartz
>
> ______________________________________________
> 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.
More information about the R-help
mailing list