用因子水平计算R中的AVERAGEIF

在r中使用ave()计算百分位数,我问如何计算ave()函数中的百分位数。 完成这个任务后,我面临着更加困难的任务。

采取以下数据:

 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 RB 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 RB 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 AA Rather 0.002251298 -0.196387489 -0.046524185 Ionia Public Schools RB Boyce El 0.020669633 -0.196387489 -0.046524185 Ionia Public Schools Emerson 0.065064968 -0.196387489 -0.046524185 Ionia Public Schools AA Rather 0.182776319 -0.196387489 -0.046524185 

我想要做的就是类似于Excel中的AVERAGEIF函数。 在Excel中,我可以说=AVERAGEIF(C2:C18, "<-.196387489") ,它的平均值为-0.278630474。 我需要在R中的一些东西,使我能够做到以下几点:我想创build新的variables的平均值:1)任何X2.Yr.AVG小于值的值2)任何值更大比Seventy的价值

问题是我需要能够在一个大的数据框架中执行这个操作,对于因子DistrictName ,这个数据框中有722个等级。 在计算百分位数的步骤中,我使用ave()函数根据所需的因子创build百分位数,如下所示:

  MATHgap$Thirty<-ave(MATHgap$X2.Yr.AVG, MATHgap$DistrictName, FUN= function(x) quantile(x, 0.3)) 

  MATHgap$Seventy<-ave(MATHgap$X2.Yr.AVG, MATHgap$DistrictName, FUN= function(x) quantile(x, 0.7)) 

有没有办法在ave()做类似AVERAGEIF的操作,这样就可以对每个区域名称的值独立于其他值重复操作了? 也就是说,爱奥尼亚公立学校的X2.Yr.AVG的平均值应小于-0.196387489, X2.Yr.AVG的平均值应大于-0.046524185,我希望能够使用各自的值对所有地区执行相同的functionX2.Yr.AVGThirtySeventy

如果这是混乱,道歉。

这是一个使用dplyr的解决scheme:

 MATHgap %>% group_by(DistrictName) %>% mutate(MeanLT30 = mean(X2.Yr.AVG[X2.Yr.AVG < Thirty]), MeantGT70 = mean(X2.Yr.AVG[X2.Yr.AVG > Seventy]))