2015-09-03 3 views
1

Я работаю над некоторым анализом количественной оценки (подробнее здесь: https://en.wikipedia.org/wiki/Recurrence_quantification_analysis) и хотел бы вычислить время ламинации и время захвата временного ряда, с которым я должен работать. Я пытаюсь перенести свой рабочий код Python в Excel, но у меня возникли проблемы с определением комбинации функций, которые позволят мне определить длины горизонтальных линий «1», сформированных из моего кода (горизонтальные линии = вертикальные линии для простого повторяющийся сюжет).Найти длины строк эквивалентных значений в Excel

В качестве примера, скажем, мой рецидивы участок (на самом деле просто массив булевы) выглядит следующим образом:

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 линии и т.д. Если кто-то может пролить свет на это, я бы очень признателен. Если для решения требуется VBA, я был бы более чем счастлив познакомиться с ним для этой цели.

+0

Не могли бы вы подробнее рассказать о своем ожидаемом результате. – ManishChristian

+0

В идеале программа сканирует каждую строку и определяет, как долго каждая «строка» из «1» находится внутри. Выходной сигнал выборки для входа приведен выше. Если алгоритм применяется только к первой строке, он будет считать одну строку из 2 и одну строку 1 '1. Второй даст только один ряд из 4 '1. Третий даст один ряд из 1 и один ряд из 2 '1 и т. Д. Надеюсь, что теперь картина более очевидна. – Lukas

ответ

1

Я думаю, что это может быть лучше всего сделано в VBA (возможно), но это может быть сделано с формулой рабочего листа. Это просто немного уродливо.

Вы можете сделать это на листе, создав пару бесплатных матриц для запуска и завершения записей ваших строк (столбцов) 1-го. Они будут выглядеть примерно так:

enter image description here

Уродливая частью является формулами снизу. Здесь много гнездящихся IF, но это не должно быть ошеломляющим, так как вы делаете что-то подобное в python. Ниже приводятся формулы для первого столбца двух вспомогательных матриц и окончательных формул подсчета. IF s может быть немного очищен, поэтому логика протекает более естественно, но это хороший (и рабочий) первый проход:

* Быстрая заметка, чтобы игнорировать апостроф/одиночные кавычки перед знаками равенства '= в формулах здесь. Я быстро нашел/заменил, чтобы получить формулы для показа на экране и прикрутить его.

enter image description here

Эти формулы:

Для начала/конца/матрицы Stend:

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

Для матрицы размера строки:

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

И для окончательного tally:

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

Вы можете просто скопировать их по строкам и столбцам в excel, чтобы они соответствовали размеру вашей матрицы (и при необходимости отрегулировали диапазоны). Я бы объяснил их более подробно, но они на самом деле просто кучка скучных вложенных ifs. Единственными частями, которые являются напуганными, являются «Stend», которые используются, чтобы сказать, что это одноразрядная строка (столбец) из 1 и формула Match(), которая вернет количество строк вниз, которые excel сначала найдет значение, которое выполняется в указанный диапазон, который на 100% подходит для этого сценария.

Если вы хотите увидеть некоторые VBA, нажмите меня в комментариях, и я могу что-то взбить.

+0

Это выглядит великолепно. Если бы вы могли набросать базовый скелет того, что мне нужно было бы сделать в VBA, это было бы очень полезно. Благодаря! – Lukas