2016-07-21 10 views
-1

です。各行のIN BETWEEN 1の0の平均頻度を計算します。 私は過去にFrequency &(1または0の)平均ストリークと(1と0の)最大ストリークを計算する列関数の組み合わせを使用しました。例について列横の値の平均頻度は

Data Table

1-0-1のないシーケンスが発生しないように、行2,3,4 & 6は省略しています。行5,7 & 8は1-0-1の配列を有する。これらのために、私はどのように各行の1の間の0の平均カウントを計算するか分からない。

ご協力いただければ幸いです。

乾杯

答えて

0

あなたは配列式を使って創造的になることができます。あなたの例では、配列式(Ctrl + Shift + Enter)としてセルT2にこのモンスター式を入力して記入してみてください。

=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)が使用されます。
+0

素晴らしい。適用された説明をありがとう! –

0

あなたは数字をカウントするために、1と=COUNT($B5:$S5)をカウントする例=COUNTIF($B5:$S5, 1)のために使用することができます。 FREQUENCY関数を調べることもできます。
これで問題が解決しない場合は、結果として期待される小さな例と数値を入力してみてください。