I have x,y data and would like to compute the average of y at each level of x.> x[1] 0.006110 0.007027 0.007027 0.007027 0.008081 0.008081 0.008081 0.008081 [9] 0.008081 0.008081 0.008081 0.009293 0.009293 0.009293 0.009293 0.009293 [17] 0.009293 0.009293 0.009293 0.010686 0.010686 0.010686 0.010686 0.010686 [25] 0.010686 0.010686 0.010686 0.010686 0.010686 0.012289 0.012289 0.012289 [33] 0.012289 0.012289 0.012289 0.012289 0.012289 0.012289 0.012289 0.012289 [41] 0.012289 0.012289 0.014133 0.014133 0.014133 0.014133 0.016253 0.018691 [49] 0.021494 0.024718 0.028426 0.032690 0.037594 0.043233 0.049718 0.057175 [57] 0.065752 0.075614 0.086957 0.100000> y[1] 0 0 1 0 0 1 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 1 1 1 [39] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1> table(x,y)y x 0 1 0.00611 1 0 0.007027 2 1 0.008081 3 4 0.009293 3 5 0.010686 4 6 0.012289 1 12 0.014133 0 4 0.016253 0 1 0.018691 0 1 0.021494 0 1 0.024718 0 1 0.028426 0 1 0.03269 0 1 0.037594 0 1 0.043233 0 1 0.049718 0 1 0.057175 0 1 0.065752 0 1 0.075614 0 1 0.086957 0 1 0.1 0 1 I would like to compute p = count1/(count0 +count1). For example, for x=0.012289, p= 12/(1+12)= 0.923077. Please tell me how to do it. Maybe there is a better way to do this without going through table(). Thanks very much for any help. Bill Simpson
one way that works is: sapply(split(y,x), mean) Bill
Try (untested): p1 <- tapply(y, x, function(z) mean(z == 0)) HTH, Andy> From: Bill Simpson [mailto:William.Simpson at drdc-rddc.gc.ca] > > I have x,y data and would like to compute the average of y at > each level > of x. > > > x > [1] 0.006110 0.007027 0.007027 0.007027 0.008081 0.008081 > 0.008081 0.008081 [9] 0.008081 0.008081 0.008081 0.009293 > 0.009293 0.009293 0.009293 0.009293 [17] 0.009293 0.009293 > 0.009293 0.010686 0.010686 0.010686 0.010686 0.010686 [25] > 0.010686 0.010686 0.010686 0.010686 0.010686 0.012289 > 0.012289 0.012289 [33] 0.012289 0.012289 0.012289 0.012289 > 0.012289 0.012289 0.012289 0.012289 [41] 0.012289 0.012289 > 0.014133 0.014133 0.014133 0.014133 0.016253 0.018691 [49] > 0.021494 0.024718 0.028426 0.032690 0.037594 0.043233 > 0.049718 0.057175 [57] 0.065752 0.075614 0.086957 0.100000 > > > y > [1] 0 0 1 0 0 1 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0 > 1 1 1 0 1 1 1 1 1 1 [39] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 > > > table(x,y) > y > x 0 1 > 0.00611 1 0 > 0.007027 2 1 > 0.008081 3 4 > 0.009293 3 5 > 0.010686 4 6 > 0.012289 1 12 > 0.014133 0 4 > 0.016253 0 1 > 0.018691 0 1 > 0.021494 0 1 > 0.024718 0 1 > 0.028426 0 1 > 0.03269 0 1 > 0.037594 0 1 > 0.043233 0 1 > 0.049718 0 1 > 0.057175 0 1 > 0.065752 0 1 > 0.075614 0 1 > 0.086957 0 1 > 0.1 0 1 > > I would like to compute p = count1/(count0 +count1). For > example, for x=0.012289, p= 12/(1+12)= 0.923077. Please tell > me how to do it. Maybe > there is a better way to do this without going through table(). > > Thanks very much for any help. > > Bill Simpson > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo> /r-help >
On 7 Nov 2003 at 9:47, Bill Simpson wrote: Since your y is 0-1 the following works: tapply(x, y ,mean) aggregate(x, y, mean) gives the output in a different format. Kjetil Halvorsen> I have x,y data and would like to compute the average of y at each level > of x. > > > x > [1] 0.006110 0.007027 0.007027 0.007027 0.008081 0.008081 0.008081 0.008081 > [9] 0.008081 0.008081 0.008081 0.009293 0.009293 0.009293 0.009293 0.009293 > [17] 0.009293 0.009293 0.009293 0.010686 0.010686 0.010686 0.010686 0.010686 > [25] 0.010686 0.010686 0.010686 0.010686 0.010686 0.012289 0.012289 0.012289 > [33] 0.012289 0.012289 0.012289 0.012289 0.012289 0.012289 0.012289 0.012289 > [41] 0.012289 0.012289 0.014133 0.014133 0.014133 0.014133 0.016253 0.018691 > [49] 0.021494 0.024718 0.028426 0.032690 0.037594 0.043233 0.049718 0.057175 > [57] 0.065752 0.075614 0.086957 0.100000 > > > y > [1] 0 0 1 0 0 1 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 1 1 1 > [39] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 > > > table(x,y) > y > x 0 1 > 0.00611 1 0 > 0.007027 2 1 > 0.008081 3 4 > 0.009293 3 5 > 0.010686 4 6 > 0.012289 1 12 > 0.014133 0 4 > 0.016253 0 1 > 0.018691 0 1 > 0.021494 0 1 > 0.024718 0 1 > 0.028426 0 1 > 0.03269 0 1 > 0.037594 0 1 > 0.043233 0 1 > 0.049718 0 1 > 0.057175 0 1 > 0.065752 0 1 > 0.075614 0 1 > 0.086957 0 1 > 0.1 0 1 > > I would like to compute p = count1/(count0 +count1). For example, for > x=0.012289, p= 12/(1+12)= 0.923077. Please tell me how to do it. Maybe > there is a better way to do this without going through table(). > > Thanks very much for any help. > > Bill Simpson > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help