Как узнать самый длинный ряд числа?

Мне этот вопрос показался тривиальным, но я не могу решить его правильно. Часть моего набора данных выглядит так

1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0    

и содержит две «серии» 1 (не уверен, что это правильное слово), одну длиной 3, другую длиной 5.

Как я могу использовать Google Docs или аналогичные приложения для работы с электронными таблицами, чтобы найти самый длинный из этих запусков?


person Mathias Maul    schedule 06.07.2012    source источник
comment
Все эти значения находятся в одной ячейке? Кроме того, есть ли максимальное количество значений для оценки?   -  person dav    schedule 06.07.2012
comment
Для дальнейшего использования этот вопрос должен был быть задан в Super User - он не связан с программированием, поэтому не относится к Stack Overflow.   -  person brettdj    schedule 08.07.2012


Ответы (2)


В Excel вы можете использовать одну формулу, чтобы получить максимальное количество последовательных единиц, т.е.

=MAX(FREQUENCY(IF(A2:A100=1,ROW(A2:A100)),IF(A2:A100<>1,ROW(A2:A100))))

подтверждается нажатием CTRL+SHIFT+ENTER

В Google Таблицах вы можете использовать ту же формулу, но обернуть формулу массива, а не использовать CSE, т.е.

=arrayformula(MAX(FREQUENCY(IF(A2:A100=1,ROW(A2:A100)),IF(A2:A100<>1,ROW(A2:A100)))))

Предполагается, что данные в формате A2:A100 без пробелов.

person barry houdini    schedule 06.07.2012
comment
+1 хорошо, знаете ли вы навскидку, если бы вы могли расширить ту же формулу, чтобы вернуть, в какой строке (или конкретной ячейке) заканчивается максимальная последовательность? - person Andy W; 06.07.2012
comment
Это сложно, нет простого способа с такой же формулой - намного проще с вашим вспомогательным столбцом, вы можете просто использовать ПОИСКПОЗ.... - person barry houdini; 06.07.2012
comment
Я нашел сложный способ..... Предполагая, что первая формула в C2 находит максимальное количество последовательных 1, тогда формула в D2 даст строку последней 1 в первом прогоне этого размера =SMALL(IF(A2:A100<>1,ROW(A2:A100)),MATCH(C2,FREQUENCY(IF(A2:A100=1,ROW(A2:A100)),IF(A2:A100<>1,ROW(A2:A100))),0)-1)+C2 - person barry houdini; 06.07.2012

РЕДАКТИРОВАТЬ: предложение whuber слишком просто для меня, чтобы не обновлять этот ответ. Можно просто использовать простой оператор IF, проверяющий, равна ли текущая строка 1. Если это так, он запускает счетчик (предыдущая строка + 1), если это не так, он снова запускает счетчик с 0.

Вам просто нужно инициализировать первую строку B1 до 1 или 0. Используя динамическое обновление формул ячеек, как только вы ее запишете, она заполнит остальные.

Итак, вы бы начали;

A   B
1   1
1   =IF(A2=1, B1+1, 0)
1   
0   
0   
1   
1   
1   
1   
0   
0   
0   

Затем заполните;

A   B
1   1
1   =IF(A2=1, B1+1, 0)
1   =IF(A3=1, B2+1, 0)
0   =IF(A4=1, B3+1, 0)
0   =IF(A5=1, B4+1, 0)
1   =IF(A6=1, B5+1, 0)
1   =IF(A7=1, B6+1, 0)
1   =IF(A8=1, B7+1, 0)
1   =IF(A9=1, B8+1, 0)
0   =IF(A10=1, B9+1, 0)
0   =IF(A11=1, B10+1, 0)
0   =IF(A12=1, B11+1, 0)

И вот результат в столбце B;

A   B
1   1
1   2
1   3
0   0
0   0
1   1
1   2
1   3
1   4
0   0
0   0
0   0

Надеюсь, логика расширяется до Google Docs.

person Andy W    schedule 06.07.2012
comment
+1 Но проще (а значит и понятнее) =IF(A3=1, B2+1, 0) и т.д. - person whuber; 06.07.2012
comment
Спасибо, я попробую это! (Первоначально я задал вопрос статистике, потому что думал, что статистикам довольно часто нужны такие функции, и думал, что (более новые?) Приложения для работы с электронными таблицами предложат это как встроенную функцию.) - person Mathias Maul; 10.07.2012
comment
@MathiasMaul, это правда, но это не относится к теме на сайте статистики. Об этом говорится в разделе Часто задаваемые вопросы на сайте статистики. Не беспокойтесь, однако, путаница в том, куда следует направить вопрос, происходит регулярно. - person Andy W; 10.07.2012