Набор данных
df <- data.frame(ID = c(55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
66, 66, 66, 66, 66, 66, 66, 66, 66, 66),
counter = c(0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 1, 1, 1, 1))
Приведенный ниже код создает две , три и четыре функции, которые подсчитывают последние два, три или четыре наблюдения, без текущей строки счетчик особенность. Расчет сгруппирован по ID .
setDT(df)[, two := Reduce(`+`, shift(counter, 1:2)), by = ID]
setDT(df)[, three := Reduce(`+`, shift(counter, 1:3)), by = ID]
setDT(df)[, four := Reduce(`+`, shift(counter, 1:4)), by = ID]
Как это выглядит сейчас:
ID counter two three four
1: 55 0 NA NA NA
2: 55 1 NA NA NA
3: 55 1 1 NA NA
4: 55 1 2 2 NA
5: 55 1 2 3 3
6: 55 1 2 3 4
7: 55 1 2 3 4
8: 55 1 2 3 4
9: 55 1 2 3 4
10: 55 1 2 3 4
11: 66 0 NA NA NA
12: 66 1 NA NA NA
13: 66 1 1 NA NA
14: 66 1 2 2 NA
15: 66 1 2 3 3
16: 66 1 2 3 4
17: 66 1 2 3 4
18: 66 1 2 3 4
19: 66 1 2 3 4
20: 66 1 2 3 4
Цель:
ID counter two three four
1 55 0 0 0 0
2 55 1 0 0 0
3 55 1 1 1 1
4 55 1 1 2 2
5 55 1 2 3 3
6 55 1 2 3 4
7 55 1 2 3 4
8 55 1 2 3 4
9 55 1 2 3 4
10 55 1 2 3 4
11 66 0 0 0 0
12 66 1 0 0 0
13 66 1 1 1 1
14 66 1 1 2 2
15 66 1 2 3 3
16 66 1 2 3 4
17 66 1 2 3 4
18 66 1 2 3 4
19 66 1 2 3 4
20 66 1 2 3 4