Я пытаюсь отследить последний экземпляр определенного атрибута в столбце, и у меня не получается запаздывать.Например, если у меня есть база данных транзакций, я бы хотел сохранить текущий флаг последнего из определенного подмножества предметов (в данном случае Drill), чтобы:
Transactions <- data.table(Customer=c("A01","A01","A01","A01","A01","A01"),
PurchaseDate=c("1/1/2018","1/2/2018","1/3/2018","1/4/2018","1/5/2018","1/6/2018"),
Purchase=c("DrillA, Bit10", "Bit11","Bit20","Bit21","DrillZ, Bit4", "Bit6"))
Становится:
Transactions <- data.table(Customer=c("A01","A01","A01","A01","A01","A01"),
PurchaseDate=c("1/1/2018","1/2/2018","1/3/2018","1/4/2018","1/5/2018","1/6/2018"),
Purchase=c("DrillA, Bit10", "Bit11","Bit20","Bit21","DrillZ, Bit4", "Bit6"),
LastDrill=c("DrillA","DrillA","DrillA", "DrillA", "DrillZ", "DrillZ"))
Я бы подумал, что смогу справиться с этим с помощью case_when, но я не могу вернуться за одну строку назад:
Transactions %>%
arrange(Customer, PurchaseDate) %>%
group_by(Customer) %>%
mutate(LastDrill = "") %>%
mutate(LastDrill = case_when(grepl("DrillA", Purchase) ~ "DrillA",
grepl("DrillZ", Purchase) ~ "DrillZ",
TRUE ~ lag(LastDrill, 1, order_by=PurchaseDate)))
Это похоже на работутранзакция, следующая сразу за транзакцией, содержащей «DrillA / DrillZ», но не поддерживающая «флаг».
Есть ли лучший способ структурировать это?Любая помощь с благодарностью!