Можно сгруппировать по «игре», а затем получить идентификатор длины бега на основе первого уровня «команды» и fill
элементов NA
с предыдущими элементами, отличными от NA
library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
group_by(game = factor(game, levels = unique(game))) %>%
mutate(poss = as.integer(factor(rleid(team != first(team)) *
NA^(team != first(team))))) %>%
fill(poss)
# A tibble: 10 x 3
# Groups: game [2]
# game team poss
# <fct> <chr> <int>
# 1 zap.che zap 1
# 2 zap.che che 1
# 3 zap.che zap 2
# 4 zap.che zap 2
# 5 zap.che che 2
# 6 bar.var bar 1
# 7 bar.var var 1
# 8 bar.var var 1
# 9 bar.var bar 2
#10 bar.var bar 2
данные
df1 <- structure(list(game = c("zap.che", "zap.che", "zap.che", "zap.che",
"zap.che", "bar.var", "bar.var", "bar.var", "bar.var", "bar.var"
), team = c("zap", "che", "zap", "zap", "che", "bar", "var",
"var", "bar", "bar")), class = "data.frame", row.names = c(NA,
-10L))