Мы можем создать переменную группирования на основе вхождения 1, затем slice
, чтобы удалить последнюю строку и сохранить ее, если есть только одна строка
library(dplyr)
df %>%
group_by(grp = cumsum(numbering == 1)) %>%
slice(if(n() == 1) 1 else -n())
Или использовать group_map
для фильтрации строк
df %>%
group_by(grp = cumsum(numbering == 1)) %>%
group_map(~ if(nrow(.x) ==1) .x else head(.x,-1L)) %>%
ungroup %>%
select(-grp)
data
df <- structure(list(numbering = c(1L, 2L, 3L, 1L, 2L, 1L, 2L, 3L,
4L, 1L), col_2 = c("h", "t", "h", "t", "h", "f", "h", "h", "h",
"h"), col_3 = c("t", "h", "t", "t", "t", "h", "h", "t", "h",
"t")), class = "data.frame", row.names = c(NA, -10L))