Роллинг кумулятивного продукта на основе условия elseif

Я ищу способ сделать скользящий продукт в выражении ifelse, основанном на дополнительном столбце?

Мои данные выглядят так

    A    B   C 
 1  1    1   
 2  3    1   
 3  5    0
 4  7    0

Эквивалент формулы Excel будет

C3 = IF(B3=0,(1+A3/10)*C2,1)

я пытался использовать

ifelse(B==0,cumprod(c(1,(A[-1]/10+1))),1)

Я не мог заставить его работать в этом случае, так как он всегда ссылается только на данные в столбце A.

Я ожидаю следующих результатов

    A    B   C 
 1  1    1   1
 2  3    1   1
 3  5    0   1.5
 4  7    0   2.55

заранее спасибо


person ThatQuantDude    schedule 26.10.2016    source источник
comment
ты написал elseif   -  person HubertL    schedule 27.10.2016
comment
... и, вероятно, вы имеете в виду ifelse().   -  person Gregor Thomas    schedule 27.10.2016
comment
Можете ли вы воспроизвести свои данные (например, с dput)? Неравное количество строк в каждом столбце означает, что у вас нет фрейма данных или матрицы, поэтому было бы неплохо увидеть, какая там структура. Это просто векторы?   -  person Gregor Thomas    schedule 27.10.2016
comment
В моем коде было elseif, данные выглядят как в примере, столбец C пуст, когда я начинаю, я просто ввожу начальные значения, так как они получат 1, назначенное в ifelse, без использования скользящего продукта   -  person ThatQuantDude    schedule 27.10.2016


Ответы (1)


Попробуй это:

df$C <- cumprod(with(df, ifelse(B==0, A/10+1, 1)))

Или используя Reduce:

df$C <- Reduce('*', with(df, ifelse(B==0, A/10+1, 1)), accumulate = T)
person 989    schedule 26.10.2016