Beschriften von zusammenhängenden Beobachtungsblöcken ohne for-Schleife

Ich habe ein Standardproblem, bei dem ich eine Schleife vermeiden kann, kann aber keine Lösung finden.

Ich antworteteDiese Frage von @splaisan aber ich musste auf einige hässliche verzerrungen im mittelteil zurückgreifen, mit afor und mehrereif Tests. Ich simuliere hier eine einfachere Version in der Hoffnung, dass jemand eine bessere Antwort geben kann ...

DAS PROBLEM

Bei einer Datenstruktur wie dieser:

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

Ich möchte zusammenhängende Stücke des gleichen Typs identifizieren und sie in Gruppen kennzeichnen. Der erste Block sollte mit 0, der nächste mit 1 usw. beschriftet sein. Es gibt eine unbestimmte Anzahl von Chunks, und jeder Chunk kann so kurz wie nur ein Mitglied sein.

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

MEINE LÖSUNG

Ich musste auf einen zurückgreifenfor Schleife, um dies zu tun, hier ist der Code:

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
}

MEINE FRAGE

Kann jemand dies ohne die Schleife und Bedingungen tun?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage