Вы можете повторить lengths
аргумент lengths
время в rle
with(rle(dataset$input), rep(lengths, lengths))
#[1] 1 2 2 2 2 1 4 4 4 4 1 1
Используя dplyr
, мы можем использовать lag
для создания групп и затем подсчитать число строк в каждой группе.
library(dplyr)
dataset %>%
group_by(gr = cumsum(input != lag(input, default = first(input)))) %>%
mutate(count = n())
и с data.table
library(data.table)
setDT(dataset)[, count:= .N, rleid(input)]
data
Убедитесь, что столбец input
символ, а не factor
.
dataset <- data.frame(input = c("a","b","b","a","a","c","a","a","a","a","b","c"),
stringsAsFactors = FALSE)