[R] Crosstab with Average and Count
Marc Schwartz
marc_schwartz at me.com
Fri Jul 20 15:41:08 CEST 2012
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
More information about the R-help
mailing list