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.