Я пытаюсь вычислить текущий счет (т. Е. Кумулятивную сумму), который зависит от других переменных и может сбрасываться для определенных значений в другой переменной.Я работаю в R и предпочел бы решение на основе dplyr
, если это возможно.
Я хотел бы создать переменную для счетчика прогонов cumulative
на основе следующего алгоритма:
- Рассчитать счетчик хода (
cumulative
) в комбинациях id
и age
- Увеличить счетчик хода (
cumulative
) на 1 для каждого последующего trial
, гдеaccuracy = 0
, block = 2
и condition = 1
- Сброс счетчика хода (
cumulative
) до 0 для каждого trial
, где accuracy = 1
, block = 2
и condition = 1
, и следующегоприращение возобновляется с 1 (не предыдущее число) - Для каждого
trial
, где block != 2
или condition != 1
, оставьте текущий счет (cumulative
) как NA
Вот минимальный рабочий пример:
mydata <- data.frame(id = c(1,1,1,1,1,1,1,1,1,1,1),
age = c(1,1,1,1,1,1,1,1,1,1,2),
block = c(1,1,2,2,2,2,2,2,2,2,2),
trial = c(1,2,1,2,3,4,5,6,7,8,1),
condition = c(1,1,1,1,1,2,1,1,1,1,1),
accuracy = c(0,0,0,0,0,0,0,1,0,0,0)
)
id age block trial condition accuracy
1 1 1 1 1 0
1 1 1 2 1 0
1 1 2 1 1 0
1 1 2 2 1 0
1 1 2 3 1 0
1 1 2 4 2 0
1 1 2 5 1 0
1 1 2 6 1 1
1 1 2 7 1 0
1 1 2 8 1 0
1 2 2 1 1 0
Ожидаемый результат:
id age block trial condition accuracy cumulative
1 1 1 1 1 0 NA
1 1 1 2 1 0 NA
1 1 2 1 1 0 1
1 1 2 2 1 0 2
1 1 2 3 1 0 3
1 1 2 4 2 0 NA
1 1 2 5 1 0 4
1 1 2 6 1 1 0
1 1 2 7 1 0 1
1 1 2 8 1 0 2
1 2 2 1 1 0 1