【问题标题】: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) &gt; COLUMN($B2)+MATCH(1,$B2:$S2,0)-1) 忽略前导零,*(COLUMN($B2:$R2) &lt; MAX(COLUMN($B2:$S2)*($B2:$S2=1))) 忽略尾随零。
    • 因此,使用AVERAGE(IF(exp &lt;&gt; 0, exp)) 的平均值计算中不包含零,不幸的是,这使公式的大小增加了一倍。
    • 最后,如果不存在条纹,则会发生错误,因此使用IFERROR(exp, 0)

    【讨论】:

    • 太棒了。非常感谢您的解释!
    【解决方案2】:

    例如,您可以使用 =COUNTIF( $B5:$S5, 1 ) 来计算 1,使用 =COUNT( $B5:$S5 ) 来计算数字。您还可以查看 FREQUENCY 函数。
    如果这不能回答您的问题,请尝试给出较小的示例以及您期望的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2012-11-14
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多