跨列的值的平均频率 excel
Average Frequency of a Value across column excel
我正在计算每行 0 出现在 1 之间的平均频率。
我过去曾结合使用频率和列函数来计算平均条纹(1 或 0)和最大条纹(1 和 0)。
例如,第 2、3、4 和 6 行被省略,因为没有出现 1-0-1 的序列。第 5、7 和 8 行的序列为 1-0-1。对于这些,我不确定如何计算每行 1 之间 0 的平均数。
任何帮助将不胜感激,并提前致谢!
干杯
例如,您可以使用 =COUNTIF( $B5:$S5, 1 )
来计算 1,使用 =COUNT( $B5:$S5 )
来计算数字。您还可以查看 FREQUENCY 函数。
如果这不能回答您的问题,请尝试提供更小的示例以及您期望的结果数字。
您可以使用数组公式发挥创意。对于您的示例,尝试在单元格 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)
- 此 returns 行从 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)
。
我正在计算每行 0 出现在 1 之间的平均频率。 我过去曾结合使用频率和列函数来计算平均条纹(1 或 0)和最大条纹(1 和 0)。
例如,第 2、3、4 和 6 行被省略,因为没有出现 1-0-1 的序列。第 5、7 和 8 行的序列为 1-0-1。对于这些,我不确定如何计算每行 1 之间 0 的平均数。
任何帮助将不胜感激,并提前致谢!
干杯
例如,您可以使用 =COUNTIF( $B5:$S5, 1 )
来计算 1,使用 =COUNT( $B5:$S5 )
来计算数字。您还可以查看 FREQUENCY 函数。
如果这不能回答您的问题,请尝试提供更小的示例以及您期望的结果数字。
您可以使用数组公式发挥创意。对于您的示例,尝试在单元格 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)
- 此 returns 行从 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)
。