Я спросил что-то похожее здесь , но функция дала некоторую проблему, я постараюсь сделать это как можно яснее.
У меня есть примерный набор данных, который выглядит следующим образом:
id <- c(1,1,1, 2,2,2, 3,3, 4,4, 5,5,5,5, 6,6,6, 7, 8,8)
item.id <- c(1,1,2, 1,1,1 ,1,1, 1,2, 1,2,2,2, 1,1,1, 1, 1,2)
sequence <- c(1,2,1, 1,2,3, 1,2, 1,1, 1,1,2,3, 1,2,3, 1, 1,1)
score <- c(0,0,0, 0,0,1, 2,0, 1,1, 1,0,1,1, 0,0,0, 1, 0,2)
data <- data.frame("id"=id, "item.id"=item.id, "sequence"=sequence, "score"=score)
> data
id item.id sequence score
1 1 1 1 0
2 1 1 2 0
3 1 2 1 0
4 2 1 1 0
5 2 1 2 0
6 2 1 3 1
7 3 1 1 2
8 3 1 2 0
9 4 1 1 1
10 4 2 1 1
11 5 1 1 1
12 5 2 1 0
13 5 2 2 1
14 5 2 3 1
15 6 1 1 0
16 6 1 2 0
17 6 1 3 0
18 7 1 1 1
19 8 1 1 0
20 8 2 1 2
id
представляет для каждого учащегося, item.id
представляет вопросы, которые задают ученики, sequence
- это номер попытки для каждого item.id
, а score
- это оценка для каждой попытки,набрав 0,1 или 2. Учащиеся могут изменить свои ответы.
Для item.id
в каждом id
я хочу создать переменную (status
), просматривая последние две последовательности (изменения):
a) assign "WW" for those who changed from wrong to wrong,
b) assign "WR" for those who changed from wrong to right,
c) assign "RW" for those who changed from right to wrong, and
d) assign "RR" for those who changed from right to right.
изменение оценки от 0 до 1 или от 0 до 2 считается правильным (правильным) изменением, в то время как изменение оценки от 1 до 0 или от 2 до 0 считается неправильным (неправильным) изменением.
Если для item.id
есть только одна попытка, как в id
= 7
, тогда status
должно быть "one.right"
. Если score
было 0
, то оно должно быть "one.wrong"
. Между тем, score
считается right
, когда оно равно 1
или 2
, score
считается неправильным, когда оно равно 0
.
желаемый результат будет в случаях:
> desired
id item.id status
1 1 1 WW
2 1 2 one.wrong
3 2 1 WR
4 3 1 RW
5 4 1 one.right
6 4 2 one.right
7 5 1 one.right
8 5 2 RR
9 6 1 WW
10 7 1 one.right
11 8 1 one.wrong
12 8 2 one.right
Есть мнения? Спасибо!