У меня есть набор данных, который выглядит следующим образом (под названием Data):Обнаружение кумулятивный продукта, если определенное условие выполняется в R
v1 v2
1 1
1 3
1 5
2 3
2 4
3 1
3 2
Я хочу вернуть вектор v3, что:
- равна v2 [i], если v1 [i] не равно v1 [i-1]
- равен v3 [i-1] * v2 [i], если v1 [i] равно v1 [i -1]
Таким образом, в этом примере, v3 должен возвращать
v3
1
3
15
3
12
1
2
Я отставал столбец v1, используя lag.v1 < -C (NA, данные [1: nrow (Данные) -1,1]) в для сравнения с предыдущей строкой. Я думаю, что что-то похожее на следующее должно работать, но со значением v3 в предыдущей строке вместо текущей строки.
данных $ v3 < -ifelse (1 * (Data $ v1 == lag.v1) == 1, данные $ v3 * Данные $ v2, данные $ v2)
Другими словами, мне нужно каким-то образом получить доступ к предыдущей строке v3 (lag v3), поскольку я формирую v3 в приведенном выше уравнении.
справка приветствуется, спасибо!
Можно ли использовать метод авеню и группу на 2 разных колонках? – user7352235
Вы можете передать более чем одну переменную группы в ave после вектора значений. Например, если у вас есть переменные 'g1',' g2' и есть столбец значений как 'v', то вы можете делать' с помощью (df, ave (v, g1, g2, FUN = cumprod)) '. – Psidom
Получил, спасибо! – user7352235