data=data.frame("StudentID" = c(1,1,1,2,2,2,3,3,3),
"Grade"=c(1,2,3,1,2,3,1,2,3),
"Score" = c(1,2,5,2,4,3,1,2,2))
У меня есть «данные» и я хочу сделать «data1», где
data1=data.frame("StudentID" = c(1,1,1,2,2,2,3,3,3),
"Grade"=c(1,2,3,1,2,3,1,2,3),
"Score" = c(1,2,5,2,4,3,1,2,2),
"Flag"=c(0,0,0,1,1,1,2,2,2))
И что Flag
делает, это указывает, если Score
при Grade
G
для StudentID
выше на G-1
. Другими словами, мы ожидаем, что оценка будет только go по всем оценкам.
- Если есть какие-либо значения
Score
, которые go ниже, чем Grade
становится выше, чем Flag
равно 1
. Связанные результаты должны быть обозначены 2
. - Если у студента есть балл
2
в Grade
2
и 3
, тогда Flag == 2
. - Если
Scores
только go повышается как Grade
, то увеличивается Flag == 0
.
Использование @akron perfect answer, библиотека (data.table) setDT (data) [, flag: = fifelse (any (diff (Score) <0), 1, fifelse (anyDuplicated) (Оценка)> 0, 2, 0)),. (StudentID)]
Теперь скажите, что для студента есть флаг 2.. Как я могу обновить их ВТОРОЙ последовательный счет, добавив 1.
Используя data1 выше
data1=data.frame("StudentID" = c(1,1,1,2,2,2,3,3,3),
"Grade"=c(1,2,3,1,2,3,1,2,3),
"Score" = c(1,2,5,2,4,3,1,2,2),
"Flag"=c(0,0,0,1,1,1,2,2,2),
"Score2" = c(1,2,5,2,4,3,1,2,3))