Max*_*den 7 sequences r data.table
我想对数据帧中的某些行组合进行编号(按ID和时间排序)
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)
Run Code Online (Sandbox Code Playgroud)
目标是创建一个新列(" number"),每列id从每个行开始编号1 to n直到end_yn == 1命中.之后end_yn == 1,编号应该重新开始.
在不考虑end_yn == 1条件的情况下,可以使用以下方式对行进行编号:
DT <- data.table(test)
DT[, id := seq_len(.N), by = id]
Run Code Online (Sandbox Code Playgroud)
但是预期的结果应该是:
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
Run Code Online (Sandbox Code Playgroud)
如何纳入end_yn == 1条件?
我猜有不同的方法可以做到这一点,但这里有一个:
DT[, cEnd := c(0,cumsum(end_yn)[-.N])] # carry the end value forward
DT[, number := seq_len(.N), by = "id,cEnd"] # create your sequence
DT[, cEnd := NULL] # remove the column created above
Run Code Online (Sandbox Code Playgroud)
设置id为关键DT可能值得.