data.table
предлагает удобную функцию rleid
для кодирование длин серий:
library(data.table)
DT = data.table(grp=rep(c("A", "B", "C", "A", "B"), c(2, 2, 3, 1, 2)), value=1:10)
rleid(DT$grp)
# [1] 1 1 2 2 3 3 3 4 5 5
Я могу имитировать это в базе R
с помощью:
df <- data.frame(DT)
rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
# [1] 1 1 2 2 3 3 3 4 5 5
Кто-нибудь знает эквивалент dplyr
(?) Или "лучший" способ создать поведение rleid
с dplyr
- это сделать что-то вроде следующего
library(dplyr)
my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
df %>%
mutate(rleid = my_rleid)
cumsum(c(1L, df$grp[-nrow(df)] != df$grp[-1]))
также для базы - person rawr   schedule 28.04.2016