Выполняет левое внешнее соединение в незащищенном наборе в той же базе данных для фильтрации в документах из «объединенной» коллекции для обработки. Для каждого входного документа этап $ lookup добавляет новое поле массива, элементы которого являются соответствующими документами из «объединенной» коллекции. Эта стадия $ lookup передает эти измененные документы на следующий этап. Этап $ lookup имеет следующие синтаксисы:
Чтобы выполнить совпадение равенства между полем из входных документов с полем из документов «объединенной» коллекции, этап $ lookup имеет следующий синтаксис:
{
$lookup:
{
from: ,
localField: ,
foreignField: ,
as:
Операция будет соответствовать следующему выражению псевдо-SQL:
SELECT *,
Вам нужно определить переключатель (я называю это 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