data=data.frame("Student"=c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5),
"Grade"=c(5,6,7,3,4,5,4,5,6,8,9,10,2,3,4),
"Pass"=c(NA,0,1,0,1,1,0,1,0,0,NA,NA,0,0,0),
"NEWPass"=c(0,0,1,0,1,1,0,1,1,0,0,0,0,0,0),
"GradeNEWPass"=c(7,7,7,4,4,4,5,5,5,10,10,10,4,4,4),
"GradeBeforeNEWPass"=c(6,6,6,3,3,3,4,4,4,10,10,10,4,4,4))
У меня есть data.frame, называемый data. В нем есть названия столбцов Student, Grade и Pass. Для этого я буду sh:
NEWPass: Take Pass и для каждого учащегося заполните значения NA с предыдущим значением. Если первое значение равно «NA», тогда ставьте ноль. Тогда это должен быть рабочий максимум.
GradeNEWPass: возьмите наименьшее значение оценки, которое студент получил в NEWPass. Если учащийся не получил один балл в NEWPass, это равняется максимальной оценке.
GradeBeforeNEWPass: примите значение оценки ДО того, как студент получит балл в NEWPass. Если учащийся не получил один в NEWPass, это соответствует максимальной оценке.
__ Попытки:
setDT(data)[, NEWPassTry := cummax(Pass), by = Student]
data$GradeNEWPass = data$NEWPassTry * data$Grade
data[, GradeNEWPass := min(GradeNEWPass), by = Student]