A

Size: a a a
A
ВП
PU
ЮМ
tibble(
from = c("user", "operator", "operator", "operator","user","operator","operator","user","operator","operator"),
type = c("text", "text", "text", "event","text","text","event","text","text","text")) %>%
group_by(type) %>%
mutate(foo = row_number()) %>%
ungroup() %>%
mutate(
foo = ifelse(type == "text", 0, foo),
foo = lag(foo, default = 0),
bar = cumsum(foo)) %>%
group_by(bar) %>%
group_split()
PU
PU
> tmp <- data.table(
+ from = c("user", "operator", "operator", "operator","user","operator","operator","user","operator","operator"),
+ type = c("text", "text", "text", "event","text","text","event","text","text","text"))
> tmp[from == 'user', new_id := rowid(from)]
> tmp[, new_id := nafill(new_id, type = 'locf')]
> tmp
from type new_id
1: user text 1
2: operator text 1
3: operator text 1
4: operator event 1
5: user text 2
6: operator text 2
7: operator event 2
8: user text 3
9: operator text 3
10: operator text 3
PU
tmp[type == 'event', new_id := rowid(type)]
tmp[, new_id := nafill(new_id, type = 'nocb')]
tmp[is.na(new_id), new_id := 0]
> tmp
from type new_id
1: user text 1
2: operator text 1
3: operator text 1
4: operator event 1
5: user text 2
6: operator text 2
7: operator event 2
8: user text 0
9: operator text 0
10: operator text 0
YS
df %>%
mutate(grp = cumsum(lag(if_else(type == "event", 1 ,0), default = 0))) %>%
group_split(grp)
library(data.table)
setDT(df)
df[, grp := cumsum(shift(ifelse(type == "event", 1, 0), fill = 0))]
split(df, df$grp)
М
М
DP
DP
PU
PU
PU
df %>%
mutate(grp = cumsum(lag(if_else(type == "event", 1 ,0), default = 0))) %>%
group_split(grp)
library(data.table)
setDT(df)
df[, grp := cumsum(shift(ifelse(type == "event", 1, 0), fill = 0))]
split(df, df$grp)
DP
PU
DP
PU
DP