Вы также можете использовать dplyr
, чтобы получить то, что вам нужно.Хитрость здесь в том, чтобы создать новую переменную группировки, year_index
здесь.Или настройте его на нужный вам интервал.
df <- data.frame(ID = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b"), Val = c(13, 12, 11, 14, 15, 6, 13, 12, 1, 9, 10, 5, 1,2,3,4,5,6,7,8,9,10,11,12,1,2))
library(dplyr)
df <- df %>%
group_by(ID) %>%
mutate(year_index = ((1:n() -1) %/% 12) + 1) %>%
group_by(year_index) %>%
mutate(sum = sum(Val))
# A tibble: 26 x 4
# Groups: month_index [2]
ID Val month_index sum
<fct> <dbl> <dbl> <dbl>
1 a 13 1 124
2 a 12 1 124
3 a 11 1 124
4 a 14 1 124
5 a 15 1 124
6 a 6 1 124
7 a 13 1 124
8 a 12 1 124
9 a 1 1 124
10 a 9 1 124
11 a 10 1 124
12 a 5 1 124
13 a 1 2 78
14 a 2 2 78
15 a 3 2 78
16 a 4 2 78
17 a 5 2 78
18 a 6 2 78
19 a 7 2 78
20 a 8 2 78
21 a 9 2 78
22 a 10 2 78
23 a 11 2 78
24 a 12 2 78
25 b 1 1 124
26 b 2 1 124