条件计数只有count家族能胜任?frequency不服!
同学们,大家好。今天是frequency的最后一讲,主要讲解条件计数的用法。我们知道条件计数的函数有countif和countifs。其实能实现条件计数的函数还有很多,比如count,sum,sumproduct,mmult等。
说白了,能实现条件计数的函数主要是求和类函数和计数类函数。而frequency是一个区间计数函数,所以它也能实现条件计数。你可能会问,frequency不是只能对数字进行统计吗?如果要统计文本是不是就不行了?的确,它只能对数字进行统计,不能直接统计文本,但我们可以将文本转为数字,然后再对其统计就可以了。那么接下来,就看几个例子吧,希望对你有所启发。
1.统计下图左表中"A"的个数
对于这个问题,我想各位小伙伴第一个想到的肯定就是countif,条件计数嘛。用countif确实是最简单的,只需要写个公式=COUNTIF(A1:C7,"A")就可以了。但是我们也不妨想想其他的方法,比如用sum或count等。
用sum的话,公式为=SUM(N(A1:C7="A")),按ctrl+shift+enter三键结束。首先用A1:C7这个区域和"A"进行比较,判断它们是否相等,相等的返回true,不相等的返回false。n函数是将true转为1,false转为0。那么等于"A"的就转为1,不等于"A"的就转为0。最后将其加起来就是"A"的个数。
用frequency的话,公式为=INDEX(FREQUENCY(N(A1:C7="A"),0),2),也要用到N(A1:C7="A")这部分,目的就是将文本转为数字,然后用frequency统计。
N(A1:C7="A")作为frequency的第1参数,返回的结果为{0,1,0;0,0,0;0,0,0;1,0,1;0,0,0;0,0,0;0,0,0},在这个数组中,只有0和1,我们只需统计1的个数就可以了。frequency的第2参数为0,那么它将最后返回的结果就分为两部分,第一部分是小于等于0的个数,也就是0的个数;第二部分是大于0的个数,也就是1的个数。frequency最后的结果为{18;3}。18就是0的个数,3就是1的个数。我们只需用index取出第2个元素3就可以了。我这么说,大家应该能理解的啊。
用frequency统计"A"的个数确实有点绕,不过也是一种思路。
2.求80分-90分之间的有多少个
对于这个问题,我们可以用countif,公式为=COUNTIF(B2:B11,">=80")-COUNTIF(B2:B11,">90"),也就是用大于等于80的个数减去大于90的个数,就是80-90之间的个数。也可以用countifs,公式为=COUNTIFS(B2:B11,">=80",B2:B11,"<=90"),这样的话就是一个多条件计数,统计大于等于80且小于等于90的个数。条件区域都是B2:B11,第1个条件是大于等于80,第2个条件是小于等于90。
如果用frequency的话,也可以用上面的两种思路,第1种就是用大于等于80的个数减去大于90的个数,公式为=INDEX(FREQUENCY(-B2:B11,-80),1)-INDEX(FREQUENCY(B2:B11,90),2)。
INDEX(FREQUENCY(-B2:B11,-80),1)这部分是统计大于等于80的个数,要注意负号的运用,第1参数-B2:B11返回的结果为{-83;-70;-68;-86;-71;-74;-63;-89;-52;-99},第2参数为-80,frequency返回的结果为{4;6}。4是小于等于-80的个数,其实也就是大于等于80的个数。所以我们用index取第1个元素。
同样的,INDEX(FREQUENCY(B2:B11,90),2)这部分是统计大于90的个数,此时大于90的个数位于frequency结果的第2部分,所以用index取出第2个元素。
如果是多条件的思路,公式为=INDEX(FREQUENCY((B2:B11>=80)*(B2:B11<=90),0),2),frequency的第1参数为(B2:B11>=80)*(B2:B11<=90),返回的结果为{1;0;0;1;0;0;0;1;0;0},也就是将条件成立的返回1,不成立的返回0。然后统计出1的个数就可以了。第2参数0将返回的结果分为两部分,小于等于0的和大于0的。所以用index取第2个元素。
3.在成绩列中统计去重的个数
这个题目的意思是删除重复项后,再统计它的个数。比如下图中有3个95分,由于它们是相同的,所以只能算做1个,再加上其他7个分数,总共就是8个去重后的分数。用countif完成的话,公式为=SUMPRODUCT(1/COUNTIF(B2:B11,B2:B11))。这个公式之前的文章说过,就不再详细说明了,只是为了和frequency做对比。
用frequency来完成的话,公式为=COUNT(0/FREQUENCY(B2:B11,B2:B11))。frequency的第1参数和第2参数是一样的,都是{66;95;99;93;95;78;94;95;67;51}。那么它返回的结果会是什么样的呢?返回的结果为{1;3;1;1;0;1;1;0;1;1;0}。如下图C列所示。通过观察可以发现,第1个95分对应的是一个数字3,后面重复出现的2个95分对应的是0。而其他没有重复的分数对应的都是1。那么我们统计非0的数字个数就是去重后的个数。后面的count就不用我说了吧。
通过3个简单实例的说明以及不同解法的对比,我们可以看到frequency也可以实现条件计数。至此frequency这个函数就说完了,更多的用法要靠大家自己挖掘了。
链接:
https://pan.baidu.com/s/1-bX60LoZa1a1DNw1iKp-xA
提取码:3vqz