ich bestimmte Kombinationen von Zeile in einem Datenrahmen nummerieren möchten (die auf ID und auf Zeit bestellt wird)Anzahl Zeilen durch variable, aber von vorn beginnen, wenn die Bedingung getroffen wird
tc <- textConnection('
id time end_yn
abc 10 0
abc 11 0
abc 12 1
abc 13 0
def 10 0
def 15 1
def 16 0
def 17 0
def 18 1
')
test <- read.table(tc, header=TRUE)
Das Ziel ist es, eine neue zu erstellen Spalte ("number
"), die jede Zeile pro id
von 1 to n
bis end_yn == 1
nummeriert ist. Nach end_yn == 1
sollte die Nummerierung von vorne beginnen.
Ohne den end_yn == 1
Zustand unter Berücksichtigung der Reihen können mit nummeriert werden:
DT <- data.table(test)
DT[, id := seq_len(.N), by = id]
jedoch das erwartete Ergebnis sein sollte:
id time end_yn number
abc 10 0 1
abc 11 0 2
abc 12 1 3
abc 13 0 1
def 10 0 1
def 15 1 2
def 16 0 1
def 17 0 2
def 18 1 3
Wie die end_yn == 1
Zustand zu übernehmen?
Sehr schlau, um den Endwert vorwärts zu tragen. Genau das brauche ich und arbeite viel schneller als meine ursprüngliche Lösung. Vielen Dank! –
Was wäre, wenn ich allen Einträgen die gleiche Nummer geben möchte, bis die end_yn-Bedingung erreicht ist? Geben Sie also den Wert 1 bis zum ersten Mal end_yn = 1, dann 2 bis end_yn = 1 für das zweite Mal, dann 3 usw. (per coockie_id). seq_len (.N) muss ersetzt werden, denke ich, aber ich kann nicht herausfinden, was –
@MaxvanderHeijden, dafür könnte man etwas wie DT versuchen [, number: = cumsum (end_yn) + 1, by = "id" ] ', aber das würde beginnen, bei' 2' zu nummerieren, wenn 'end_yn'' 1' für den ersten Eintrag einer 'id' ist. Versuchen Sie, das data.table-Tag auf SO zu durchsuchen, da eine ähnliche Frage möglicherweise bereits gestellt wurde. – BenBarnes