Я пытаюсь применить различные бизнес-логики c к моему исходному набору данных, используя вложенные ifelse () и shift (), но мой код дает мне результаты, которые я не понимаю. Проблема заключается в следующем: у меня есть набор данных клиентов, содержащий «CustomerID», «Month» и «Status».
CustomerID Month Status
43210 1/1/18 A
43210 2/1/18 B
43210 3/1/18 A
43210 4/1/18 B
43210 5/1/18 C
43210 6/1/18 D
43210 7/1/18 B
6543 1/1/19 C
6543 2/1/19 D
6543 3/1/19 A
6543 4/1/19 B
6543 5/1/19 C
6543 6/1/19 A
Мне нужно создать третий столбец с именем «Journey_Status», применив следующие логики c.
#Initialize the 1st record of each Customer.
Example1$Journey_Status=ifelse(!duplicated(Example1[,c("CustomerID")]), Example1$Status, "")
Example1[ , Journey_Status := ifelse(duplicated(CustomerID),
ifelse(shift(Journey_Status, 1, type="lag") == "A" &
Status %in% c("A", "B", "C", "D"),
Status,
ifelse(shift(Journey_Status, 1, type="lag") == "B" &
Status %in% c("B", "C", "D"),
Status,
ifelse(shift(Journey_Status, 1, type="lag") == "C" &
Status %in% c("C", "D"),
Status,
ifelse(shift(Journey_Status, 1, type="lag") == "D" &
Status %in% c("D"),
Status,
shift(Journey_Status, 1, type="lag"))))),
Journey_Status)][]
Я ожидаю увидеть следующее:
CustomerID Month Status Journey_Status
43210 1/1/18 A A
43210 2/1/18 B B
43210 3/1/18 A B
43210 4/1/18 B B
43210 5/1/18 C C
43210 6/1/18 D D
43210 7/1/18 B D
6543 1/1/19 C C
6543 2/1/19 D D
6543 3/1/19 A D
6543 4/1/19 B D
6543 5/1/19 C D
6543 6/1/19 A D
Вместо этого я получаю следующее:
CustomerID Month Status Journey_Status
43210 1/1/18 A A
43210 2/1/18 B B
43210 3/1/18 A
43210 4/1/18 B
43210 5/1/18 C
43210 6/1/18 D
43210 7/1/18 B
6543 1/1/19 C C
6543 2/1/19 D D
6543 3/1/19 A
6543 4/1/19 B
6543 5/1/19 C
6543 6/1/19 A
Я не вижу, как выполняется shift()
... Ваша помощь очень ценится !!! Спасибо !!!