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?