返回列表 上一主題 發帖

[發問] 找出各群組的眾數(不含0)

1.
眾數讓我以為是要用 MODE() 函數找出現頻率最高的數,
應該是各組中找出最高連續重複數之第一位數位置於C欄標示其值,其他位置標示為 0

2.
提供一個沒有名稱定義的範例,為加速計算增加輔助欄將每一組最多連續重複的第一數位置標訂出來。
=INT(1%+1/MOD(MAX(INDEX(FREQUENCY(-ROW($1:$88),-ROW($1:$88)*(((A$1:A$88<>G2)+(B$1:B$88<>B$2:B$89)+(B$1:B$88=0))>0))+1/ROW($2:$90),)),1))

3.
C欄的公式就能大幅簡化計算
=IF(A2="","",(VLOOKUP(A2,G:H,2,)=ROW())*B2)

4.
範列檔案
眾數_ML089.rar (6.71 KB)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 36# Bodhidharma

公式速度要快,需要將每一項都會 重複計算的計算數 讓想辦法只計算一次,就需要用 輔助欄 或 定義名稱。

我提供的 輔助欄 公式是採用 擴大範圍 來計算,如果 組項 非常多時可以採用 動態範圍 來替代,可以縮短更多時間。

定義名稱 其實也可以加快計算,並非使用 定義名稱 就會變慢,例如一個公式內會使用好幾次 動態範圍,用 定義名稱 來設 動態範圍 就能節省不少時間。
若 定義名稱 相對於每一個儲存格都是 "引數" 都需要根據這些 "引數s"此做一遍計算,這時反而會變得更慢。

台端上面的分析說明寫的很棒,應該給你一個讚。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

此題採用垂直輔助欄 可以用下列公式較為簡單

第一個最高次數的值
D2 =IF(ROW()=INT(1%+1/MOD(MAX(OFFSET(E$1,MATCH(A2,A:A,)-1,,COUNTIF(A:A,A2))),1)),B2,"")

輔助欄 : 是否連續出現,格式設為整數型態較為美觀
E2 =IF(B2=B3,INT(N(E3))+1+1/ROW(),"")

眾數0407.rar (23.43 KB)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 40# Bodhidharma

1.
對,
前E2公式
=IF(B2=B3,INT(N(E3))+1+1/ROW(),"")
並沒有處理"不同組"或是"數值為零"的情況,可以改為
=IF(AND(A2=A3,B2=B3,B2<>0),INT(N(E3))+1+1/ROW(),"")

2.
FREQUENCY看說明確實不容易懂,記得剛開始學此函數時也在網路上找很多實例來了解,仍需做做小模型反覆比較差異才能深入。

FREQUENCY並無 遞增或遞減 的規定
是計算小於或等於bins_array間的data_array數量。

因為題目要求在連續重複數的第一個顯示其值,因標記數要大於等於data_array(該重複數區內)。

例如 A1:A9中A4:A6是重複數 {1,2,3,4,4,4,7,8,9}

一式
=FREQUENCY(ROW(1:9),ROW(1:9)*(L1:L9<>L2:L10))
={1;1;1;0;0;3;1;1;1;0}

二式
=FREQUENCY(-ROW(1:9),-ROW(1:9)*(L1:L9<>L2:L10))
={1;1;3;0;0;1;1;1;1;0}

兩式都可以得最大重複數 3,但位置卻不同。這就是 ROW(1:9) 與 -ROW(1:9) 差一個負號的用意。
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 43# Bodhidharma


bin_array 不用排序,若有重複數時,計算值會標註於第一次出現之數位置其他為0
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 47# Bodhidharma


如果能模擬出正確答案,對FREQUENCY函數已經充分了解
另外加一點,非數字自動排除,計算值會往前排列
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 49# Bodhidharma

I2
=IF(ROW()=COUNTA(B:B)+1,COUNTIF(A:A,">"&MAX(B:B)),IF(OR(ISERR(-B2),MATCH(B2,B:B,)<>ROW()),0,COUNTIF(A:A,"<="&B2)-IF(B2=MIN(B:B),0,COUNTIF(A:A,"<="&SMALL(B:B,COUNTIF(B:B,"<"&B2))))))

一般公式

此公式模擬 FREQUENCY 但沒有處理 bin_array 有非數值之情況,
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

ISERR(-B2) 判斷是否為文字,若是文字 -B2 會產生錯誤

COUNIFS 功能強大可是我不太喜歡用,因為很多題目仍需符合 2003版才能適用
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復  ML089

感謝您有興趣解答這一題,我將公式套入正式的數值中,結果有的眾數不會在第一次出現的位置顯 ...
PJChen 發表於 2013-4-10 18:05



    我看一半數據了都是在每組眾數第一位置出現,你把看到有問題的位置再告訴我
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復  ML089

我用黃底標示有問題的部份.

D76
D289
D1637
D1708
PJChen 發表於 2013-4-10 21:38


目前公式是標示在最大連續數的第一個連續數位置,並不是第一個出現的位置,這也比較合理,同時指出最大連續數的起始位置。
請在思考看看
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 盡多少本份,就得多少本事。
返回列表 上一主題