请考虑由ID
和Val
组成的数据集。
# dataset
ID Val Counter
1 2 1
1 4 2
1 NA 2
1 13 3
1 12 4
2 NA 0
2 33 1
2 5 2
2 5 3
每个子组的计数器可以由dt[, normal_counter := 1:.N, by=ID]
添加。我正在寻找一个计数器,该计数器在有NA
值时不递增(请参见上面的示例中的counter
)。
答案 0 :(得分:3)
这是按组划分的非NA
值的累积总和,因此:
dat[, cntr := cumsum(!is.na(Val)), by=ID]
dat
# ID Val Counter cntr
#1: 1 2 1 1
#2: 1 4 2 2
#3: 1 NA 2 2
#4: 1 13 3 3
#5: 1 12 4 4
#6: 2 NA 0 0
#7: 2 33 1 1
#8: 2 5 2 2
#9: 2 5 3 3