作者JieJuen (David)
看板Office
标题[算表] EXCEL函数:FREQUENCY演算法
时间Fri Dec 7 06:31:31 2007
FREQUENCY(data_array,bins_array)
计算某一个范围内的值出现的次数,并传回一个垂直数值阵列。
其中Bins_array(以下简称bin)预期使用者输入升幂数列。
说明档:
"如果 bins_array 没有数值,则 FREQUENCY 传回 data_array 中元素的个数。"
但测试结果,bin参照的储存格若空白,当作0来处理,
因此似乎说明档说明错误?
当bin不是升幂数列时,可以检视FREQUENCY的演算法。
(此演算法不一定正确,为测试结果)
演算法:
归於第一个 "大於等於被分类数" 的分界点中
最接近被分类数的分界点
如果被分类数大於所有分界点(如此则上句结果为空)
归於最後一组
具体步骤如下:
1. 由前往後找
2. 当分界点=被分类的数,则归类
3. 当分界点<被分类的数,去除
4. 在剩於的分界点中,求出分界点最小值
5. 在剩於的分界点中,归於第一个符合最小值的组。
6. 无最小值时,归於最後一组。
好,大概看不懂上面在写什麽,先看正常例子
假设要分类1 2 3 8共4个数
bin为{2;5;7}共三个分界点
会有三+1个答案
因为三个分界点,会分出四个组。
现在函数要把4个数分到这四个组里,怎麽做呢?
开始
拿着(第一个data)1,
(bin-data)
2-1=1 >0 第一组:1
5-1=4 >0 第二组:4
7-1=6 >0 第三组:6
第一组为最小正值 →一
拿着2,
2-2=0 =0 第一组:TRUE →一
拿着3,
2-3=-1 <0 第一组:FALSE
5-3=2 >0 第二组:2
7-3=4 >0 第三组:4
第二组为最小正值 →二
拿着8,
2-8=-6 <0 第一组:FALSE
5-8=-3 <0 第二组:FALSE
7-8=-1 <0 第三组:FALSE
无最小正值 →四
统计数量={2;1;0;1}
输出。
此为=FREQUENCY({1;2;3;8},{2;5;7})之结果。
----------------------------------------------------
假设bin乱改为(因规定要升羃){7;5;2}
开始
拿着1,
7-1=6 >0 第一组:6
5-1=4 >0 第二组:4
2-1=1 >0 第三组:1
第三组为最小正值 →三
拿着2,
7-2=5 >0 第一组:5
5-2=3 >0 第二组:3
2-2=0 =0 第三组:TRUE →三
拿着3,
7-3=4 >0 第一组:4
5-3=2 >0 第二组:2
2-3=-1 <0 第三组:FALSE
第二组为最小正值 →二
拿着8,
7-8=-1 <0 第一组:FALSE
5-8=-3 <0 第二组:FALSE
2-8=-6 <0 第三组:FALSE
无最小正值 →四
统计数量={0;1;2;1}
此为=FREQUENCY({1;2;3;8},{7;5;2})之结果。
-----------------------------------------
有重覆的bin如{5;5;2}
拿着1,
5-1=4 >0 第一组:4
5-1=4 >0 第二组:4
2-1=1 >0 第三组:1
第三组为最小正值 →三
拿着2,
5-2=3 >0 第一组:3
5-2=3 >0 第二组:3
2-2=0 =0 第三组:TRUE →三
拿着3,
5-3=2 >0 第一组:2
5-3=2 >0 第二组:2
2-3=-1 <0 第三组:FALSE
第一、二组为最小正值,归入最前者 →一
拿着8,
5-8=-1 <0 第一组:FALSE
5-8=-3 <0 第二组:FALSE
2-8=-6 <0 第三组:FALSE
无最小正值 →四
统计数量={1;0;2;1}
此为=FREQUENCY({1;2;3;8},{5;5;2})之结果。
-----------------------------------------------
总之呢,
如果刚好等於分界点,就归在那组,
不然就在所有更大的分界点中,找最接近的;
有重覆的,归在第一个,
万一没有更大的分界点,就归在最後一组。
目前测试结果,都符合,
如果有例外,欢迎告知^^~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.50.149
※ 编辑: JieJuen 来自: 218.164.50.149 (12/07 06:33)