用因子水平计算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.AVG
, Thirty
和Seventy
。
如果这是混乱,道歉。
这是一个使用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]))