excel - Calculating AVERAGEIF in R by factor level -
in calculating percentiles factor using ave() in r, asked how calculate percentiles within ave()
function. task finished, i'm faced more difficult task.
take following data:
districtname building name x2.yr.avg thirty seventy ionia public schools emerson -0.337464323 -0.196387489 -0.046524185 ionia public schools jefferson -0.318673587 -0.196387489 -0.046524185 ionia public schools ionia middle -0.290854669 -0.196387489 -0.046524185 ionia public schools ionia middle -0.288202752 -0.196387489 -0.046524185 ionia public schools twin rivers el -0.23426755 -0.196387489 -0.046524185 ionia public schools r.b. boyce el -0.202319963 -0.196387489 -0.046524185 ionia public schools twin rivers el -0.142995221 -0.196387489 -0.046524185 ionia public schools emerson -0.141620372 -0.196387489 -0.046524185 ionia public schools jefferson -0.141407078 -0.196387489 -0.046524185 ionia public schools r.b. boyce el -0.115530249 -0.196387489 -0.046524185 ionia public schools ionia middle -0.111449269 -0.196387489 -0.046524185 ionia public schools twin rivers el -0.054918339 -0.196387489 -0.046524185 ionia public schools jefferson -0.045591501 -0.196387489 -0.046524185 ionia public schools a.a. rather 0.002251298 -0.196387489 -0.046524185 ionia public schools r.b. boyce el 0.020669633 -0.196387489 -0.046524185 ionia public schools emerson 0.065064968 -0.196387489 -0.046524185 ionia public schools a.a. rather 0.182776319 -0.196387489 -0.046524185
what i'm trying akin averageif
function in excel. in excel, can =averageif(c2:c18, "<-.196387489")
, spits out average value -0.278630474. need in r allows me following: want create new variables average value of: 1) values of x2.yr.avg
smaller value of thirty
2) values larger value of seventy
the catch need able perform operation in large data frame 722 levels factor districtname
. in step calculating percentiles, used ave()
function create percentiles according desired factor follows:
mathgap$thirty<-ave(mathgap$x2.yr.avg, mathgap$districtname, fun= function(x) quantile(x, 0.3))
and
mathgap$seventy<-ave(mathgap$x2.yr.avg, mathgap$districtname, fun= function(x) quantile(x, 0.7))
is there way akin averageif within ave()
operation repeated each value of districtname
independently of others? i.e, ionia public schools should have average value x2.yr.avg
less -0.196387489 , x2.yr.avg
greater -0.046524185, , want able perform same function districts using respective values x2.yr.avg
, thirty
, , seventy
.
if confusing, apologies.
here's solution using dplyr
:
mathgap %>% group_by(districtname) %>% mutate(meanlt30 = mean(x2.yr.avg[x2.yr.avg < thirty]), meantgt70 = mean(x2.yr.avg[x2.yr.avg > seventy]))
Comments
Post a Comment