带条件按组计数(在R data.table中)

时间:2018-09-07 19:06:54

标签: r data.table

请考虑由IDVal组成的数据集。

# 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)。

1 个答案:

答案 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