library(dplyr)
library(tidyr)
d %>%
group_by(Person) %>%
mutate(Ranking = sequence(rle(Group)$lengths) == 1) %>%
ungroup() %>%
select(-Timestamp) %>%
filter(Ranking) %>%
mutate(Ranking = cumsum(Ranking))
## A tibble: 3 x 3
# Person Group Ranking
# <chr> <chr> <int>
#1 Person A X 1
#2 Person A Y 2
#3 Person A X 3
В базе R
do.call(rbind, lapply(split(d, d$Person), function(x){
data.frame(Person = x$Person[1],
with(rle(x$Group),
data.frame(Group = values,
Ranking = seq_along(values))))}))
ДАННЫЕ
d = structure(list(Person = c("Person A", "Person A", "Person A",
"Person A", "Person A", "Person A",
"Person A", "Person A", "Person A"),
Group = c("X", "X", "X", "Y", "Y", "Y", "X", "X", "X"),
Timestamp = c("12:00 PM", "12:01 PM", "12:03 PM", "12:10 PM",
"12:11 PM", "12:12 PM", "12:20 PM", "12:21 PM",
"12:22 PM")),
class = "data.frame",
row.names = c(NA, -9L))