vurduğunuzda baştan başlamaksayı satır, ancak koşul I (Zaman numarası ve üzerinde sıralanır) bir dataframe satır belirli birleşimleri sayı istiyorum
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)
gol yeni yaratmaktır 1 to n
'dan end_yn == 1
'a kadar her satır için id
numaralı her satırı numaralandıran sütun ("number
"). end_yn == 1
'dan sonra numaralandırma baştan başlamalı.
DT <- data.table(test)
DT[, id := seq_len(.N), by = id]
Ancak beklenen sonuç olmalıdır:
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
Nasıl end_yn == 1
koşulu dahil etmek hesaba end_yn == 1
koşulu almadan
satır kullanılarak numaralandırılmış edilebilir? Ben burada yapmak farklı yolları vardır tahmin yürütüyorum ama ediyorum
Son değeri ileri taşımak için çok akıllı. Bu tam olarak ihtiyacım olan şey ve benim ilk çözümümden çok daha hızlı çalışıyor. Teşekkürler! –
End_yn koşulu gelene kadar tüm girişleri aynı sayıya vermek istersem ne olur? Bu nedenle, ilk kez end_yn = 1 değerine kadar 1, ikinci kez de end_yn = 1 olana kadar 3, sonra 3 vb. (Coockie_id başına) sayı verin. seq_len (.N) değiştirilmesi gerektiğini düşünüyorum, ama ne –
@MaxvanderHeijden ile ne olduğunu anlayamıyorum, bunun için, bir şey gibi deneyebilirsiniz dt [, sayı: = cumsum (end_yn) + 1, by = "id" ] ', ancak' id'nin ilk girişi için '' '' '' '' 'ise' 2' de numaralandırmaya başlayacaktır. SO üzerinde data.table etiketini aramayı deneyin, çünkü benzer bir soru çoktan sorulmuş olabilir. – BenBarnes