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-boun...@r-project.org [mailto:r-help-bounces@r- > project.org] On Behalf Of Marc Schwartz > Sent: Friday, July 20, 2012 8:41 AM > To: vioravis > Cc: r-help@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@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. ______________________________________________ R-help@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.