【问题标题】:Average Frequency of a Value across column excel跨列excel的值的平均频率
【发布时间】:2016-11-24 09:14:41
【问题描述】:
我正在寻找计算 0 的平均频率,它们存在于每行的 1 之间。
我过去使用频率和列函数的组合来计算平均条纹(1 或 0)和最大条纹(1 和 0)。
例如,第 2、3、4 和 6 行被省略,因为没有出现 1-0-1 的序列。第 5,7 和 8 行的序列为 1-0-1。对于这些,我不确定如何计算每行 1 之间 0 的平均计数。
任何帮助将不胜感激,并提前致谢!
干杯
【问题讨论】:
标签:
excel
multiple-columns
frequency
【解决方案1】:
您可以利用数组公式获得创意。对于您的示例,尝试在单元格 T2 中输入这个怪物公式作为数组公式 (Ctrl+Shift+Enter) 并填写。
=IFERROR( 2 * AVERAGE( IF(($B2:$R2=0)*($C2:$S2=1)*COLUMN($B2:$R2)*(COLUMN($B2:$R2) > COLUMN($B2)+MATCH(1,$B2:$S2,0)-1) - ($B2:$R2=1)*($C2:$S2=0)*COLUMN($B2:$R2)*(COLUMN($B2:$R2) < MAX(COLUMN($B2:$S2)*($B2:$S2=1))) <> 0, ($B2:$R2=0)*($C2:$S2=1)*COLUMN($B2:$R2)*(COLUMN($B2:$R2) > COLUMN($B2)+MATCH(1,$B2:$S2,0)-1) - ($B2:$R2=1)*($C2:$S2=0)*COLUMN($B2:$R2)*(COLUMN($B2:$R2) < MAX(COLUMN($B2:$S2)*($B2:$S2=1))) ) ), 0)
没有过多的细节,这就是正在发生的事情:
-
($B2:$R2=0)*($C2:$S2=1)*COLUMN($B2:$R2) - 这将返回一个列号数组,其中行从 0 过渡到 1(条纹结束)。类似地,- ($B2:$R2=1)*($C2:$S2=0)*COLUMN($B2:$R2) 将行从 1 转换为 0(条纹开始)处的列号添加到数组中,但减去它以给出负列号。
- 将每对正负列号相加将得出条纹长度。总和除以条纹数得出平均条纹长度。更简单地说,将所有正负列数的平均值乘以 2 即可得出相同的结果。
- 行中的前导零和尾随零是一个问题,因此添加了一个附加掩码以忽略它们。
*(COLUMN($B2:$R2) > COLUMN($B2)+MATCH(1,$B2:$S2,0)-1) 忽略前导零,*(COLUMN($B2:$R2) < MAX(COLUMN($B2:$S2)*($B2:$S2=1))) 忽略尾随零。
- 因此,使用
AVERAGE(IF(exp <> 0, exp)) 的平均值计算中不包含零,不幸的是,这使公式的大小增加了一倍。
- 最后,如果不存在条纹,则会发生错误,因此使用
IFERROR(exp, 0)。
【解决方案2】:
例如,您可以使用 =COUNTIF( $B5:$S5, 1 ) 来计算 1,使用 =COUNT( $B5:$S5 ) 来计算数字。您还可以查看 FREQUENCY 函数。
如果这不能回答您的问题,请尝试给出较小的示例以及您期望的结果。