Я пытаюсь рассчитать совокупную сумму для учеников, которые были подключены к сети поддержки во время их обучения.
Примерным кадром данных может быть (ID = студент, срок = семестр интереса, поддержка = экспозиция для поддержки сети):
df <- data.frame(ID=c(123451, 123451, 123451, 123451, 123452, 123452, 123452, 123452,
123452, 123452, 123452, 123453, 123453, 123453, 123453, 123453, 123453, 123453, 123453),
Term= c(1141, 1148, 1158, 1141, 1158, 1161, 1148, 1151, 1158, 1138,
1141, 1138, 1141, 1141, 1148, 1138, 1148, 1158, 1161),
Support = c(1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1))
Поскольку я ищу кумулятивное воздействие (начиная с самого раннего семестра), я сначала упорядочил данные по идентификатору и термину: df <- df[order(df[,1], df[,2]),]
Я тогда вычислила кумулятивную сумму для переменной Support в отдельный столбец
df$Dosage <- ave(df[3], df[1], FUN=cumsum)
Вывод:
ID Term Support Dosage
1 123451 1141 1 1
4 123451 1141 1 2
2 123451 1148 0 2
3 123451 1158 1 3
10 123452 1138 0 0
11 123452 1141 0 0
7 123452 1148 1 1
8 123452 1151 1 2
5 123452 1158 1 3
9 123452 1158 1 4
6 123452 1161 0 4
12 123453 1138 1 1
16 123453 1138 0 1
13 123453 1141 0 1
14 123453 1141 1 2
15 123453 1148 0 2
17 123453 1148 1 3
18 123453 1158 1 4
19 123453 1161 1 5
Хотя это полезно, если студент имеет две строки для одного семестра, я хотел бы, чтобы значение для Dosage отражало максимальное значение.
Так что для Student = 123451 и Term = 1141 я бы хотел, чтобы оба значения Dosage были равны 2.
Для Student = 123452 и Term = 1158, я хотел бы, чтобы оба значения дозировки были равны 4.
Для Student = 123453 и Term = 1148, я хотел бы, чтобы оба значения дозировки равнялись 3.
Ожидаемый выход ут:
ID Term Support Dosage
1 123451 1141 1 2
4 123451 1141 1 2
2 123451 1148 0 2
3 123451 1158 1 3
10 123452 1138 0 0
11 123452 1141 0 0
7 123452 1148 1 1
8 123452 1151 1 2
5 123452 1158 1 4
9 123452 1158 1 4
6 123452 1161 0 4
12 123453 1138 1 1
16 123453 1138 0 1
13 123453 1141 0 2
14 123453 1141 1 2
15 123453 1148 0 3
17 123453 1148 1 3
18 123453 1158 1 4
19 123453 1161 1 5