我有这个清单:
def grades = [5,4,3,2,1,1]
其中,index是等级,value是等级的具体值:| 等级|发生率|| - -----|- -----|| 0| 5个|| 1| 4|| 2| 3|| 3| 2|| 4| 1|| 5个|1|如何计算成绩的第90百分位数?
7eumitmz1#
这让我得到一个完整的等级。我希望能找到90百分位数的精确值,但这对我来说就够了。
def grades = [5,4,3,2,1,1] sum=grades.sum() per_grade=0 per_value=sum*0.9 grades.eachWithIndex { grade_count, grade -> per_value-=grade_count if (per_value<0){per_grade=grade-1} if (per_value==0){per_grade=grade} } out.write(per_grade)
bxgwgixi2#
如果我没有理解错的话,一共有16个等级(5 + 4 + 3 + 2 + 1 + 1 = 16)。90%是14. 4个等级,所以丢弃最低的14个等级,取剩下的最小的(在你的例子中会是4)。如何编码?有一些方法:1.你可以通过你得到的数组来计数。14减去5(= 9),然后是4,然后是3,然后是2。一旦你达到零,你就在第90百分位的指数上。1.也许更容易理解,但需要更多的代码行:将所有16个等级放入数组(或列表)中:[0,0,0,0,0,1,1,1,2,2,3,3,4,5]。由于数组是排序的,因此在索引14处找到中值。我相信你会从自己编写代码中学到最多的东西,所以我不会从你身上拿走这种乐趣或学习。
2条答案
按热度按时间7eumitmz1#
这让我得到一个完整的等级。我希望能找到90百分位数的精确值,但这对我来说就够了。
bxgwgixi2#
如果我没有理解错的话,一共有16个等级(5 + 4 + 3 + 2 + 1 + 1 = 16)。90%是14. 4个等级,所以丢弃最低的14个等级,取剩下的最小的(在你的例子中会是4)。
如何编码?有一些方法:
1.你可以通过你得到的数组来计数。14减去5(= 9),然后是4,然后是3,然后是2。一旦你达到零,你就在第90百分位的指数上。
1.也许更容易理解,但需要更多的代码行:将所有16个等级放入数组(或列表)中:[0,0,0,0,0,1,1,1,2,2,3,3,4,5]。由于数组是排序的,因此在索引14处找到中值。
我相信你会从自己编写代码中学到最多的东西,所以我不会从你身上拿走这种乐趣或学习。