Применение логики If Then к кадру данных R

Dick McManus спросил: 03 февраля 2018 в 10:31 в: r

Я думаю, что я, возможно, откусил больше, чем могу пожевать. Я пытаюсь применить логическое уравнение к набору данных на основе нескольких факторов для разработки окончательной оценки за каждый год. Я получил все свои данные в одном и том же месте, но теперь изо всех сил стараюсь манипулировать им.

У меня есть кадр данных, который выглядит так:

YEAR    ID    V1   V2   V3   Delta1   Delta2
1990    A     3    NA   NA   NA       NA
1991    A     5    2    NA   2        NA
1992    A     7    4    6    2        2
1990    B     3    1    NA   NA       NA
1991    B     5    2    NA   2        1
1992    B     7    1    NA   2        -1
etc

Я хочу применить следующую логику для вычисления нового столбца для каждой строки:

Для каждого идентификатора в 1990 году

if there is a V3 value that will be selected    
else if    
if there is a V2 value that will be selected for the new column    
else
they are assigned the value of V1 (V1 is always populated).

Для каждого последующего года Идентификатору присваивается значение, основанное на

if there is a V3 value it equals V3 * Delta1
else if
the ID has never had a V3 value the calculated value will equal V2
else if
it has had a V3 but just not this year it equals the years previous calculated value for that ID * Delta2
else
the calculated value simply equals the previous years calculated value * Delta1

Я знаю, как применять if else логику, но я теряюсь в том, как сделать это итеративно через годы для каждого ID в отношении фрейма данных. Любая помощь будет оценена, спасибо.

EDIT:

В идеале вывод будет выглядеть как таковой

YEAR    ID    V1   V2   V3   Delta1   Delta2   CalculateColumn
1990    A     3    NA   NA   NA       NA        3
1991    A     5    2    NA   2        NA        4
1992    A     7    4    6    2        2         6
1990    B     3    1    NA   NA       NA        1
1991    B     5    2    NA   2        1         2
1992    B     7    1    NA   2        -1        4
etc

0 ответов