Вам нужно определить переключатель (я называю это Flag
), который изменяется при изменении состояния, что и требуется.
library(dplyr)
library(tidyr)
df <- df %>%
mutate(Flag = ifelse(Status == lag(Status), 0, 1),
Flag = ifelse(is.na(Flag), 1, Flag),
CumSum = cumsum(Flag)) %>%
group_by(Date, `Mac address`, Status, CumSum) %>%
summarize(Out = paste(Link, collapse = "_")) %>%
ungroup() %>%
arrange(CumSum)
df
РЕДАКТИРОВАТЬ: вот вывод, который я получаю, который идентичен тому, что вы сказали, что ожидали. Не уверен, что вы имеете в виду в комментарии об этом до сих пор не
# output
# A tibble: 10 x 5
Date `Mac address` Status CumSum Out
<chr> <chr> <lgl> <dbl> <chr>
1 1/15/2~ 00:00:00:00:00~ FALSE 1 247-237
2 1/15/2~ 00:00:00:00:00~ TRUE 2 237-235
3 1/15/2~ 00:00:00:00:00~ FALSE 3 235-109
4 1/15/2~ 00:00:00:00:00~ TRUE 4 214-106
5 1/15/2~ 00:00:00:00:00~ FALSE 5 106-215
6 1/15/2~ 00:00:00:00:00~ TRUE 6 215-253_253-245
7 1/15/2~ 00:00:00:00:00~ FALSE 7 245-238_238-243_241-233_233-248_248-2~
8 1/15/2~ 00:00:00:00:00~ TRUE 8 239-230
9 1/15/2~ 00:00:00:00:00~ FALSE 9 230-229_229-252
10 1/15/2~ 00:00:00:00:00~ TRUE 10 252-244_244-232
Поскольку в конце, компиляциях Присяжного острослова и кэшах шаблонные файлы к собственному PHP-коду, нет действительно никакого теоретического различия в производительности. Конечно, всегда будет некоторая потеря производительности из-за блока Кода присяжного острослова, который должен быть интерпретирован каждый раз.
Просто найденный этим очень простым сравнительным тестом - propably не очень значительный.
Вы могли бы также хотеть взять в новой библиотеке шаблонов, которая подобна Присяжному острослову по имени Dwoo
Присяжный острослов генерирует код PHP для всех его шаблонных файлов, когда они сначала используются, если у Вас есть настроенный правильно, и использует их, если это возможно, вместо того, чтобы анализировать шаблоны снова.
Я использовал его некоторое время, и это было достаточно быстро, но в конце я выгрузил его для простых файлов PHP, потому что это немного ограничивало (слишком много PHP4-измов).
Присяжный острослов самостоятельно является скорее крупной библиотекой... Если Ваша попытка использовать Присяжного острослова, я предлагаю, чтобы Вы использовали APC для кэширования скомпилированной версии.. Это сместит довольно большой размер библиотеки Smarty...
Это зависит от того, как Вы используете Присяжного острослова, потому что поток Ваших страниц может измениться
Классический простой поток PHP:
Классический поток Присяжного острослова:
Если простой PHP занял 1,0 секунды для этой страницы, страница Smarty также занимает 1,0 секунды. НО если мы предполагаем, что вся база данных и $ _request handeling занимают 0,7 секунды. Простой PHP запускает вывод непосредственно, в то время как версия Присяжного острослова запускает вывод после 0,7 секунд. Для этого браузер может начать загружать таблицы стилей и отображает быстрее. Никакой вывод также не означает, что кнопка "Stop" не имеет никакого эффекта.
Однако в Присяжном острослове можно вызвать функции и методы из шаблона. Задержка медленной части туда, где данные необходимы.
Существует понижение замены для Присяжного острослова под названием Шаблон, Облегченный, который намного более легок относительно размера файла библиотеки. Тем не менее я использовал исходного Присяжного острослова в некоторых чрезвычайно высоких ситуациях с загрузкой, не будучи должен загрузить эту библиотеку.
На основе моих собственных событий и неофициальных сравнительных тестов, Присяжный острослов отдельно не вызывает основных сокращений производительности. Однако при вхождении в запись пользовательских плагинов вещи спускаются.
Шаблон Smarty компилируется и кэшируется как PHP, но пользовательский плагин всегда загружается и выполняется во времени выполнения и всегда медленнее, чем выполнение того же кода в простом файле PHP. Вы не собираетесь замечать это слишком много с плагином форматирования пользовательской строки, но Вы будете определенно видеть его, когда выполнение базы данных запрашивает в плагине.
В целом, я настоятельно рекомендую Присяжному острослову. Вытаскивание дисплея из PHP сделало наш код настолько более читаемым и удобным в сопровождении. Просто необходимо удостовериться, что Вы осторожны относительно того, что Вы вставляете плагины.
вот еще одно решение для создания шаблонов XSLT. Вот мои тесты для одной из преобразованных страниц (это простая страница):
// with smarty (baseline)
0.014 seconds
// with xsl/xslt-clientside
0.008 seconds
42% decrease in server stress
// with xsl/xslt-serverside
// this process would only be done if the users browser doesn't support client-side XSLT
0.016 seconds
14% increase in server stress
Это не для всех, но если производительность является вашей главной заботой:)
Кроме того, вы позволяете клиенту кэшировать ваш шаблон.
вот пример того, что я делаю (это один из моих сайтов): http://pixao.com
и вот еще один пример этого на крупномасштабном сайте: http://worldofwarcraft.com
пока что я еще не сталкивался ни с какими ограничителями шоу