2016-04-28 16 views
0
auffüllen

Ich habe ein Dataset und muss eine neue Variable erstellen, die das zeilenweise Auftreten von Wert für die Variable im sortierten Dataset auffüllt, wie unten gezeigt.Wert der Variablen in R

VAR1 VAR2 (to be created) 
C1  1 
C1  2 
C1  3 
C2  1 
C3  1 
C3  2 
C4  1 
C5  1 

Vielen Dank für die Hilfe im Voraus.

Antwort

1
unlist(sapply(rle(as.character(df$VAR1))$lengths,seq)) 
#[1] 1 2 3 1 1 2 1 1 
+0

ich den Fehler bekommen "Fehler in rle (dumdt $ CLIENT_ID): 'x' muss ein Vektor eines atomaren Typ sein". Kannst du darauf hinweisen, was ich falsch machen könnte? –

+0

Entschuldigung. Habe es zur Arbeit gebracht. Zum Konvertieren in eine Zeichenliste erforderlich. Vielen Dank. –

0

Hier ist eine weitere Option rle und sequence mit

with(df1, sequence(rle(VAR1)$lengths)) 
#[1] 1 2 3 1 1 2 1 1 

Oder mit ave

with(df1, ave(seq_along(VAR1), 
     cumsum(c(TRUE, VAR1[-1]!= VAR1[-length(VAR1)])), FUN = seq_along)) 
#[1] 1 2 3 1 1 2 1 1 

Oder rleid vonmit

library(data.table) 
setDT(df1)[, VAR2 := seq_len(.N) , by = rleid(VAR1)] 
Verwandte Themen