在Excel中查找等价值线的长度

我正在做一些复发定量分析(更多信息在这里: https : //en.wikipedia.org/wiki/Recurrence_quantification_analysis ),并希望计算我必须使用的时间序列的分层和捕获时间。 我试图将我工作的Python代码移植到Excel中,但是在计算function的组合时遇到了困难,这将使我能够计算出代码生成的水平线的长度(水平线=垂直线,复发情节)。

作为一个例子,说我的复发情节(真的只是一个布尔数组)看起来像这样:

1 1 0 0 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 1 1 0 1 1 1 

我如何计算由'1'组成的所有线的长度? 理想情况下,我的输出看起来像这样:

 1 4 2 3 3 1 4 1 

因为有4条长1线,3条长2线等。如果有人能说明这一点,我将不胜感激。 如果解决scheme需要VBA,我很乐意为此目的熟悉它。

我认为这可能是最好的VBA(也许),但它也可以完成与工作表公式的。 它变得有点丑陋。

您可以在工作表中通过构build几个免费的matrix来logging1行的行(列)的开始和结束。 他们看起来像这样:

在这里输入图像说明

丑陋的部分是下面的公式。 这里有很多嵌套的IF,但是它不应该是令人难以置信的,因为你在Python中做了类似的事情。 下面我显示了两个辅助matrix的第一列和最终计数公式的公式。 IF可能会被清理一些,所以逻辑stream程更自然,但这是一个很好的(和工作)第一遍:

*快速注释忽略在这里的公式等号前的撇号/单引号。 我做了一个快速查找/replace,以获得公式显示屏幕打印和搞砸了。

在这里输入图像说明

这些公式是:

对于开始/结束/ stendmatrix:

 =IF(A1=1, IF(AND(A6<>"", A2=0), "end", IF(A6<>"","x", IF(A2=0, "stend", "start"))),"") 

对于行大小matrix:

 =IF(A7="start", MATCH("end", A7:A11,0), IF(A7="stend", 1, 0)) 

而最后的理货:

 =COUNTIF($A$13:$E$17,A19) 

你可以复制那些行和列在Excel中,使他们适合你的matrix大小(并在必要时调整范围)。 我会更深入地解释它们,但它们实际上只是一堆枯燥的嵌套ifs。 唯一的部分是时髦的是“Stend”被用来说这是一个单一大小的行(列)1和Match()公式,它将返回的行数,Excel中第一次find的值是在指定的范围内search,这是100%完美的这种情况。

如果你想看到一些VBA,打我的评论,我可以掀起一些东西。