Маркировка смежных кусков наблюдений без цикла for

У меня есть стандартная "может я избежать петли" проблема, но не может найти решение.

я ответилэтот вопрос от @splaisan но мне пришлось прибегнуть к некоторым уродливым искажениям в средней части, сfor и несколькоif тесты. Я симулирую более простую версию здесь в надежде, что кто-то может дать лучший ответ ...

THE PROBLEM

Учитывая структуру данных, как это:

df <- read.table(text = 'type
a
a
a
b
b
c
c
c
c
d
e', header = TRUE)

Я хочу идентифицировать смежные куски одного типа и пометить их в группах. Первый блок должен быть помечен 0, следующий 1 и так далее. Существует неопределенное количество чанков, и каждый чанк может быть всего лишь одним участником.

type    label
   a    0
   a    0
   a    0
   b    1
   b    1
   c    2
   c    2
   c    2
   c    2
   d    3
   e    4

MY SOLUTION

Я должен был прибегнуть кfor цикл, чтобы сделать это, вот код:

label <- 0
df$label <- label

# LOOP through the label column and increment the label
# whenever a new type is found
for (i in 2:length(df$type)) {
    if (df$type[i-1] != df$type[i]) { label <- label + 1 }
    df$label[i] <- label
}

MY QUESTION

Кто-нибудь может сделать это без цикла и условных выражений?

Ответы на вопрос(3)

Ваш ответ на вопрос